@trycourier/courier-ui-inbox 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/utils.ts","../src/components/courier-inbox-list-item-menu.ts","../src/datastore/datastore.ts","../src/components/courier-inbox-list-item.ts","../src/components/courier-inbox-skeleton-list-item.ts","../src/components/courier-inbox-skeleton-list.ts","../src/components/courier-inbox-pagination-list-item.ts","../src/utils/extensions.ts","../src/components/courier-inbox-list.ts","../src/components/courier-inbox-option-menu-item.ts","../src/components/courier-inbox-option-menu.ts","../src/components/courier-unread-count-badge.ts","../src/components/courier-inbox-header-title.ts","../src/components/courier-inbox-header.ts","../src/datastore/datastore-listener.ts","../src/types/courier-inbox-theme.ts","../src/types/courier-inbox-theme-manager.ts","../src/components/courier-inbox.ts","../src/components/courier-inbox-menu-button.ts","../src/components/courier-inbox-popup-menu.ts","../src/index.ts","../src/datastore/datatore-events.ts"],"sourcesContent":["import { InboxMessage, InboxAction } from \"@trycourier/courier-js\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\n\n/**\n * Copy a message\n * @param message - The message to copy\n * @returns A copy of the message\n */\nexport function copyMessage(message: InboxMessage): InboxMessage {\n const copy = {\n ...message,\n };\n\n if (message.actions) {\n copy.actions = message.actions.map(action => copyInboxAction(action));\n }\n\n if (message.data) {\n copy.data = JSON.parse(JSON.stringify(message.data));\n }\n\n if (message.tags) {\n copy.tags = [...message.tags];\n }\n\n if (message.trackingIds) {\n copy.trackingIds = { ...message.trackingIds };\n }\n\n return copy;\n}\n\n/**\n * Copy an inbox action\n * @param action - The inbox action to copy\n * @returns A copy of the inbox action\n */\nexport function copyInboxAction(action: InboxAction): InboxAction {\n const copy = {\n ...action,\n };\n\n if (action.data) {\n copy.data = JSON.parse(JSON.stringify(action.data));\n }\n\n return copy;\n}\n\n/**\n * Copy an inbox data set\n * @param dataSet - The inbox data set to copy\n * @returns A copy of the inbox data set\n */\nexport function copyInboxDataSet(dataSet?: InboxDataSet): InboxDataSet | undefined {\n\n if (!dataSet) {\n return undefined;\n }\n\n return {\n ...dataSet,\n messages: dataSet.messages.map(message => copyMessage(message)),\n };\n\n}\n\nexport function getMessageTime(message: InboxMessage): string {\n if (!message.created) return 'Now';\n\n const now = new Date();\n const messageDate = new Date(message.created);\n const diffInSeconds = Math.floor((now.getTime() - messageDate.getTime()) / 1000);\n\n if (diffInSeconds < 5) return 'Now';\n if (diffInSeconds < 60) return `${diffInSeconds}s`;\n if (diffInSeconds < 3600) return `${Math.floor(diffInSeconds / 60)}m`;\n if (diffInSeconds < 86400) return `${Math.floor(diffInSeconds / 3600)}h`;\n if (diffInSeconds < 604800) return `${Math.floor(diffInSeconds / 86400)}d`;\n if (diffInSeconds < 31536000) return `${Math.floor(diffInSeconds / 604800)}w`;\n return `${Math.floor(diffInSeconds / 31536000)}y`;\n}","import { CourierBaseElement, CourierIconButton, registerElement } from '@trycourier/courier-ui-core';\nimport { CourierInboxIconTheme, CourierInboxTheme } from '../types/courier-inbox-theme';\n\nexport type CourierInboxListItemActionMenuOption = {\n id: string;\n icon: CourierInboxIconTheme;\n onClick: () => void;\n};\n\nexport class CourierInboxListItemMenu extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item-menu';\n }\n\n // State\n private _theme: CourierInboxTheme;\n private _options: CourierInboxListItemActionMenuOption[] = [];\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n const menu = document.createElement('ul');\n menu.className = 'menu';\n this.appendChild(menu);\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const menu = theme.inbox?.list?.item?.menu;\n\n return `\n ${CourierInboxListItemMenu.id} {\n display: none;\n position: absolute;\n background: ${menu?.backgroundColor ?? 'red'};\n border: ${menu?.border ?? '1px solid red'};\n border-radius: ${menu?.borderRadius ?? '0px'};\n box-shadow: ${menu?.shadow ?? '0 2px 8px red'};\n user-select: none;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s;\n overflow: hidden;\n }\n\n ${CourierInboxListItemMenu.id}.visible {\n display: block;\n opacity: 1;\n pointer-events: auto;\n }\n\n ${CourierInboxListItemMenu.id} ul.menu {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n }\n\n ${CourierInboxListItemMenu.id} li.menu-item {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-bottom: none;\n background: transparent;\n }\n `;\n }\n\n setOptions(options: CourierInboxListItemActionMenuOption[]) {\n this._options = options;\n this.renderMenu();\n }\n\n private renderMenu() {\n // Clear existing menu items\n const menu = this.querySelector('ul.menu');\n if (!menu) return;\n menu.innerHTML = '';\n const menuTheme = this._theme.inbox?.list?.item?.menu;\n\n // Prevent click events from propagating outside of this menu\n const cancelEvent = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n // Create new menu items\n this._options.forEach((opt) => {\n const icon = new CourierIconButton(opt.icon.svg, opt.icon.color, menuTheme?.backgroundColor, menuTheme?.item?.hoverBackgroundColor, menuTheme?.item?.activeBackgroundColor, menuTheme?.item?.borderRadius);\n\n // Handle both click and touch events\n const handleInteraction = (e: Event) => {\n cancelEvent(e);\n opt.onClick();\n };\n\n // Add click handler for desktop\n icon.addEventListener('click', handleInteraction);\n\n // Add touch handlers for mobile\n icon.addEventListener('touchstart', cancelEvent);\n icon.addEventListener('touchend', handleInteraction);\n\n // Prevent default touch behavior\n icon.addEventListener('touchmove', cancelEvent);\n\n // Prevent mouse events from interfering\n icon.addEventListener('mousedown', cancelEvent);\n icon.addEventListener('mouseup', cancelEvent);\n\n menu.appendChild(icon);\n });\n }\n\n show() {\n this.style.display = 'block';\n this.classList.add('visible');\n }\n\n hide() {\n this.style.display = 'none';\n this.classList.remove('visible');\n }\n}\n\nregisterElement(CourierInboxListItemMenu);","import { Courier, CourierGetInboxMessagesResponse, InboxMessage, InboxMessageEvent, InboxMessageEventEnvelope } from \"@trycourier/courier-js\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { CourierInboxDataStoreListener } from \"./datastore-listener\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { DataSetSnapshot, MessageSnapshot } from \"../types/snapshots\";\nimport { copyInboxDataSet, copyMessage } from \"../utils/utils\";\n\nexport class CourierInboxDatastore {\n private static instance: CourierInboxDatastore;\n private _inboxDataSet?: InboxDataSet;\n private _archiveDataSet?: InboxDataSet;\n private _dataStoreListeners: CourierInboxDataStoreListener[] = [];\n private _unreadCount?: number;\n private isPaginatingInbox: boolean = false;\n private isPaginatingArchive: boolean = false;\n\n public static get shared(): CourierInboxDatastore {\n if (!CourierInboxDatastore.instance) {\n CourierInboxDatastore.instance = new CourierInboxDatastore();\n }\n return CourierInboxDatastore.instance;\n }\n\n public get unreadCount(): number {\n return this._unreadCount ?? 0;\n }\n\n public get inboxDataSet(): InboxDataSet {\n return this._inboxDataSet ?? { feedType: 'inbox', messages: [], canPaginate: false, paginationCursor: null };\n }\n\n public get archiveDataSet(): InboxDataSet {\n return this._archiveDataSet ?? { feedType: 'archive', messages: [], canPaginate: false, paginationCursor: null };\n }\n\n public addDataStoreListener(listener: CourierInboxDataStoreListener) {\n this._dataStoreListeners.push(listener);\n }\n\n public removeDataStoreListener(listener: CourierInboxDataStoreListener) {\n this._dataStoreListeners = this._dataStoreListeners.filter(l => l !== listener);\n }\n\n private async fetchCachableDataSet(props: { fetch: Promise<CourierGetInboxMessagesResponse>, feedType: CourierInboxFeedType, canUseCache: boolean }): Promise<InboxDataSet> {\n\n // If we can return the cached version, return it.\n // If there is no cache, it will fall through and fetch the latest from the server.\n if (props.canUseCache) {\n if (props.feedType === 'inbox' && this._inboxDataSet) {\n return this._inboxDataSet;\n }\n if (props.feedType === 'archive' && this._archiveDataSet) {\n return this._archiveDataSet;\n }\n }\n\n // Perform the fetch\n const response = await props.fetch;\n\n // Bundle the data properly\n return {\n feedType: props.feedType,\n messages: response.data?.messages?.nodes ?? [],\n canPaginate: response.data?.messages?.pageInfo?.hasNextPage ?? false,\n paginationCursor: response.data?.messages?.pageInfo?.startCursor ?? null,\n };\n\n }\n\n private async fetchUnreadCount(props: { canUseCache: boolean }): Promise<number> {\n\n if (props.canUseCache && this._unreadCount !== undefined) {\n return this._unreadCount;\n }\n\n const unreadCount = await Courier.shared.client?.inbox.getUnreadMessageCount();\n return unreadCount ?? 0;\n }\n\n public async load(props?: { canUseCache: boolean }) {\n\n try {\n\n const client = Courier.shared.client;\n\n // If the user is not signed in, return early\n if (!client?.options.userId) {\n throw new Error('User is not signed in');\n }\n\n // If no props are provided, use the default values\n const properties = props ?? { canUseCache: true };\n\n // Fetch the data. Done in parallel\n const [inboxDataSet, archiveDataSet, unreadCount] = await Promise.all([\n this.fetchCachableDataSet({ fetch: client.inbox.getMessages(), feedType: 'inbox', canUseCache: properties.canUseCache }),\n this.fetchCachableDataSet({ fetch: client.inbox.getArchivedMessages(), feedType: 'archive', canUseCache: properties.canUseCache }),\n this.fetchUnreadCount(properties),\n ]);\n\n // Update the local data\n this._inboxDataSet = inboxDataSet;\n this._archiveDataSet = archiveDataSet;\n this._unreadCount = unreadCount;\n\n // Notify the listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error loading inbox:', error);\n this._dataStoreListeners.forEach(listener => {\n listener.events.onError?.(error as Error);\n });\n }\n }\n\n // Connect the socket\n public async listenForUpdates() {\n try {\n await this.connectSocket();\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error listening for updates:', error);\n this._dataStoreListeners.forEach(listener => {\n listener.events.onError?.(error as Error);\n });\n }\n }\n\n private async connectSocket() {\n const socket = Courier.shared.client?.inbox.socket;\n\n try {\n // If the socket is not available, return early\n if (!socket) {\n Courier.shared.client?.options.logger?.info('CourierInbox socket not available');\n return;\n }\n\n // Handle message events\n socket.addMessageEventListener((event: InboxMessageEventEnvelope) => {\n if (event.event === InboxMessageEvent.NewMessage) {\n const message: InboxMessage = event.data as InboxMessage;\n this.addMessage(message, 0, 'inbox');\n return;\n }\n\n const message = this.getMessage({ messageId: event.messageId });\n\n switch (event.event) {\n case InboxMessageEvent.MarkAllRead:\n this.readAllMessages({ canCallApi: false });\n break;\n case InboxMessageEvent.Read:\n if (message) {\n this.readMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Unread:\n if (message) {\n this.unreadMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Opened:\n if (message) {\n this.openMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Archive:\n if (message) {\n this.archiveMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.ArchiveRead:\n this.archiveReadMessages({ canCallApi: false });\n break;\n case InboxMessageEvent.ArchiveAll:\n this.archiveAllMessages({ canCallApi: false });\n break;\n case InboxMessageEvent.Clicked:\n if (message) {\n this.clickMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Unarchive:\n if (message) {\n this.unarchiveMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Unopened:\n break;\n }\n });\n\n // If the socket is already connecting or open, return early\n if (socket.isConnecting || socket.isOpen) {\n Courier.shared.client?.options.logger?.info(`Inbox socket already connecting or open for client ID: [${Courier.shared.client?.options.connectionId}]`);\n return;\n }\n\n // Connect to the socket. By default, the socket will subscribe to all events for the user after opening.\n await socket.connect();\n Courier.shared.client?.options.logger?.info(`Inbox socket connected for client ID: [${Courier.shared.client?.options.connectionId}]`);\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to connect socket:', error);\n }\n }\n\n /**\n * Get a message by messageId from the inbox or archive data set\n * @param props - The message ID\n * @returns The message or undefined if it is not found\n */\n private getMessage(props: { messageId?: string }): InboxMessage | undefined {\n if (!props.messageId) {\n return undefined;\n }\n\n return this._inboxDataSet?.messages.find(m => m.messageId === props.messageId) ??\n this._archiveDataSet?.messages.find(m => m.messageId === props.messageId);\n }\n\n /**\n * Fetch the next page of messages\n * @param props - The feed type\n * @returns The next page of messages or null if there is no next page\n */\n async fetchNextPageOfMessages(props: { feedType: CourierInboxFeedType }): Promise<InboxDataSet | null> {\n\n switch (props.feedType) {\n case 'inbox':\n\n if (this.isPaginatingInbox) {\n return null;\n }\n\n if (this._inboxDataSet?.canPaginate && this._inboxDataSet.paginationCursor) {\n try {\n this.isPaginatingInbox = true;\n const response = await Courier.shared.client?.inbox.getMessages({\n paginationLimit: Courier.shared.paginationLimit,\n startCursor: this._inboxDataSet.paginationCursor\n });\n const dataSet: InboxDataSet = {\n feedType: 'inbox',\n messages: response?.data?.messages?.nodes ?? [],\n canPaginate: response?.data?.messages?.pageInfo?.hasNextPage ?? false,\n paginationCursor: response?.data?.messages?.pageInfo?.startCursor ?? null\n };\n this.addPage(dataSet);\n return dataSet;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error fetching next page of inbox messages:', error);\n return null;\n } finally {\n this.isPaginatingInbox = false;\n }\n }\n\n break;\n case 'archive':\n\n if (this.isPaginatingArchive) {\n return null;\n }\n\n if (this._archiveDataSet?.canPaginate && this._archiveDataSet.paginationCursor) {\n try {\n this.isPaginatingArchive = true;\n const response = await Courier.shared.client?.inbox.getArchivedMessages({\n paginationLimit: Courier.shared.paginationLimit,\n startCursor: this._archiveDataSet.paginationCursor\n });\n const dataSet: InboxDataSet = {\n feedType: 'archive',\n messages: response?.data?.messages?.nodes ?? [],\n canPaginate: response?.data?.messages?.pageInfo?.hasNextPage ?? false,\n paginationCursor: response?.data?.messages?.pageInfo?.startCursor ?? null\n };\n this.addPage(dataSet);\n return dataSet;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error fetching next page of archived messages:', error);\n return null;\n } finally {\n this.isPaginatingArchive = false;\n }\n }\n\n break;\n }\n\n return null;\n }\n\n /**\n * Check if the datastore is loaded and ready to perform mutations\n * @returns True if the datastore is loaded and ready to perform mutations, false otherwise\n */\n private canMutate(): boolean {\n return !!(Courier.shared.client && this._inboxDataSet && this._archiveDataSet);\n }\n\n async readMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the datastore snapshot\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Copy original message and index\n const snapshot = this.getMessageSnapshot(message);\n\n // If the message is already read, return\n if (snapshot.message.read) {\n return;\n }\n\n try {\n\n // Read the message\n snapshot.message.read = new Date().toISOString();\n this.applyMessageSnapshot(snapshot);\n\n // Update the unread count\n this._unreadCount = datastoreSnapshot.unreadCount - 1;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.read({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error reading message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async unreadMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the datastore snapshot\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Save original message and index\n const snapshot = this.getMessageSnapshot(message);\n\n // If the message is already unread, return\n if (!snapshot.message.read) {\n return;\n }\n\n try {\n\n // Unread the message\n snapshot.message.read = undefined;\n\n // Apply the message snapshot\n this.applyMessageSnapshot(snapshot);\n\n // Update the unread count\n this._unreadCount = datastoreSnapshot.unreadCount + 1;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.unread({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error unreading message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async openMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Mutable copy of the message\n const snapshot = this.getMessageSnapshot(message);\n\n // If the message is not in the inbox or archive, return\n if (snapshot.inboxIndex === undefined && snapshot.archiveIndex === undefined) {\n return;\n }\n\n // If the message is already opened, return\n if (snapshot.message.opened) {\n return;\n }\n\n try {\n snapshot.message.opened = new Date().toISOString();\n this.applyMessageSnapshot(snapshot);\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.open({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error opening message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async clickMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n try {\n if (message.trackingIds?.clickTrackingId && canCallApi) {\n await Courier.shared.client?.inbox.click({\n messageId: message.messageId,\n trackingId: message.trackingIds?.clickTrackingId\n });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error clicking message:', error);\n }\n }\n\n async archiveMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the message snapshot\n const messageSnapshot = this.getMessageSnapshot(message);\n\n // If the message is not in the inbox, return\n if (messageSnapshot.inboxIndex === undefined) {\n return;\n }\n\n // Get the datastore snapshots\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n // Update the message to be archived\n message.archived = new Date().toISOString();\n\n // Remove message from local state\n this.removeMessage(message, messageSnapshot.inboxIndex, 'inbox');\n\n // Find index to insert archived message and add to archive\n if (this._archiveDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._archiveDataSet);\n this.addMessage(message, insertIndex, 'archive');\n }\n\n // Call API to archive message\n if (canCallApi) {\n await Courier.shared.client?.inbox.archive({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error archiving message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async unarchiveMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the datastore snapshots\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Get the message snapshot\n const messageSnapshot = this.getMessageSnapshot(message);\n\n // If the message is not in the archive, return\n if (messageSnapshot.archiveIndex === undefined) {\n return;\n }\n\n try {\n\n // Update the message to be unarchived\n messageSnapshot.message.archived = undefined;\n\n // Remove message from local state\n this.removeMessage(message, messageSnapshot.archiveIndex, 'archive');\n\n // Find index to insert unarchived message and add to inbox\n if (this._inboxDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._inboxDataSet);\n this.addMessage(message, insertIndex, 'inbox');\n }\n\n // Call API to unarchive message\n if (canCallApi) {\n await Courier.shared.client?.inbox.unarchive({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error unarchiving message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async archiveReadMessages({ canCallApi = true }: { canCallApi?: boolean; } = {}): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get snapshot of the inbox data set\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n const timestamp = new Date().toISOString();\n\n // Archive all read messages\n const messagesToArchive = this._inboxDataSet?.messages.filter(message => message.read) ?? [];\n messagesToArchive.forEach(message => {\n\n // Update the message to be archived\n message.archived = timestamp;\n\n // Remove message from inbox\n const inboxIndex = this._inboxDataSet?.messages.findIndex(m => m.messageId === message.messageId);\n if (inboxIndex !== undefined && inboxIndex !== -1) {\n this._inboxDataSet?.messages.splice(inboxIndex, 1);\n }\n\n // Add message to archive\n if (this._archiveDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._archiveDataSet);\n this._archiveDataSet.messages.splice(insertIndex, 0, message);\n }\n\n });\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n });\n\n // Call API to archive read messages\n if (canCallApi) {\n await Courier.shared.client?.inbox.archiveRead();\n }\n\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error archiving read messages:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async archiveAllMessages({ canCallApi = true }: { canCallApi?: boolean; } = {}): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get snapshot of the inbox data set\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n const timestamp = new Date().toISOString();\n\n // Archive all read messages\n this._inboxDataSet?.messages.forEach(message => {\n message.archived = timestamp;\n\n // Add message to archive\n if (this._archiveDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._archiveDataSet);\n this._archiveDataSet.messages.splice(insertIndex, 0, message);\n }\n\n });\n\n // Clear the inbox data set\n this._inboxDataSet = {\n messages: [],\n canPaginate: false,\n paginationCursor: null,\n feedType: 'inbox',\n };\n\n // Update the unread count\n this._unreadCount = 0;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n // Call API to archive all messages\n if (canCallApi) {\n await Courier.shared.client?.inbox.archiveAll();\n }\n\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error archiving all messages:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async readAllMessages({ canCallApi = true }: { canCallApi?: boolean; } = {}): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Store original state for potential rollback\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n const timestamp = new Date().toISOString();\n\n // Read all messages\n this._inboxDataSet?.messages.forEach(message => {\n if (!message.read) {\n message.read = timestamp;\n }\n });\n\n // Read all archived messages\n this._archiveDataSet?.messages.forEach(message => {\n if (!message.read) {\n message.read = timestamp;\n }\n });\n\n // Update unread count\n this._unreadCount = 0;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.readAll();\n }\n\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error reading all messages:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n /**\n * Find the insert index for a new message in a data set\n * @param newMessage - The new message to insert\n * @param dataSet - The data set to insert the message into\n * @returns The index to insert the message at\n */\n private findInsertIndex(newMessage: InboxMessage, dataSet: InboxDataSet): number {\n const messages = dataSet.messages;\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n if (message.created && newMessage.created && message.created < newMessage.created) {\n return i;\n }\n }\n\n return messages.length;\n }\n\n private addPage(dataSet: InboxDataSet) {\n switch (dataSet.feedType) {\n case 'inbox':\n if (this._inboxDataSet) {\n this._inboxDataSet.canPaginate = dataSet.canPaginate;\n this._inboxDataSet.paginationCursor = dataSet.paginationCursor;\n this._inboxDataSet.messages = [...this._inboxDataSet.messages, ...dataSet.messages];\n }\n break;\n case 'archive':\n if (this._archiveDataSet) {\n this._archiveDataSet.canPaginate = dataSet.canPaginate;\n this._archiveDataSet.paginationCursor = dataSet.paginationCursor;\n this._archiveDataSet.messages = [...this._archiveDataSet.messages, ...dataSet.messages];\n }\n break;\n }\n this._dataStoreListeners.forEach(listener =>\n listener.events.onPageAdded?.(dataSet, dataSet.feedType)\n );\n }\n\n private addMessage(message: InboxMessage, index: number, feedType: CourierInboxFeedType) {\n switch (feedType) {\n case 'inbox':\n if (!message.read && this._unreadCount !== undefined) {\n this._unreadCount = this._unreadCount + 1;\n }\n this._inboxDataSet?.messages.splice(index, 0, message);\n break;\n case 'archive':\n this._archiveDataSet?.messages.splice(index, 0, message);\n break;\n }\n this._dataStoreListeners.forEach(listener => {\n listener.events.onMessageAdd?.(message, index, feedType);\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n }\n\n private removeMessage(message: InboxMessage, index: number, feedType: CourierInboxFeedType) {\n switch (feedType) {\n case 'inbox':\n if (!message.read && this._unreadCount !== undefined) {\n this._unreadCount = this._unreadCount - 1;\n }\n this._inboxDataSet?.messages.splice(index, 1);\n break;\n case 'archive':\n this._archiveDataSet?.messages.splice(index, 1);\n break;\n }\n this._dataStoreListeners.forEach(listener => {\n listener.events.onMessageRemove?.(message, index, feedType);\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n }\n\n /**\n * Apply a message snapshot to the data store\n * @param snapshot - The message snapshot to apply\n */\n private applyMessageSnapshot(snapshot: MessageSnapshot) {\n if (snapshot.archiveIndex !== undefined) {\n this.updateMessage(snapshot.message, snapshot.archiveIndex, 'archive');\n }\n if (snapshot.inboxIndex !== undefined) {\n this.updateMessage(snapshot.message, snapshot.inboxIndex, 'inbox');\n }\n }\n\n private applyDatastoreSnapshot(snapshot: DataSetSnapshot) {\n const { unreadCount, inbox, archive } = snapshot;\n\n // Update the data sets\n this._inboxDataSet = inbox;\n this._archiveDataSet = archive;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(unreadCount);\n });\n }\n\n /**\n * Update a message in the data store\n * @param message - The message to update\n * @param index - The index of the message in its respective data set\n * @param feedType - The feed type of the message\n */\n private updateMessage(message: InboxMessage, index: number, feedType: CourierInboxFeedType) {\n switch (feedType) {\n case 'inbox':\n if (this._inboxDataSet) {\n this._inboxDataSet.messages[index] = message;\n }\n break;\n case 'archive':\n if (this._archiveDataSet) {\n this._archiveDataSet.messages[index] = message;\n }\n break;\n }\n this._dataStoreListeners.forEach(listener => {\n listener.events.onMessageUpdate?.(message, index, feedType);\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n }\n\n /**\n * Copy an inbox data set\n * @param dataSet - The inbox data set to copy\n * @returns A copy of the inbox data set\n */\n private getDatastoreSnapshot(unreadCount: number, inboxDataSet?: InboxDataSet, archiveDataSet?: InboxDataSet): DataSetSnapshot {\n return {\n unreadCount,\n inbox: copyInboxDataSet(inboxDataSet),\n archive: copyInboxDataSet(archiveDataSet),\n };\n }\n\n /**\n * Copy an inbox message with its archive and inbox indices\n * @param message - The inbox message to copy\n * @returns A copy of the inbox message with its archive and inbox indices\n */\n private getMessageSnapshot(message: InboxMessage): MessageSnapshot {\n const archiveIndex = this._archiveDataSet\n ? this._archiveDataSet.messages.findIndex(m => m.messageId === message.messageId)\n : undefined;\n\n const inboxIndex = this._inboxDataSet\n ? this._inboxDataSet.messages.findIndex(m => m.messageId === message.messageId)\n : undefined;\n\n return {\n message: copyMessage(message),\n archiveIndex,\n inboxIndex,\n };\n }\n\n}\n","import { InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierBaseElement, CourierButton, CourierIcon, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { getMessageTime } from \"../utils/utils\";\nimport { CourierInboxListItemMenu, CourierInboxListItemActionMenuOption } from \"./courier-inbox-list-item-menu\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\n\nexport class CourierInboxListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item';\n }\n\n // State\n private _themeManager: CourierInboxThemeManager;\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\n private _canClick: boolean = false;\n // private _canLongPress: boolean = false; // Unused for now. But we can use this in the future if needed.\n\n // Elements\n private _titleElement?: HTMLParagraphElement;\n private _subtitleElement?: HTMLParagraphElement;\n private _timeElement?: HTMLParagraphElement;\n private _menu?: CourierInboxListItemMenu;\n private _unreadIndicator?: HTMLDivElement;\n private _actionsContainer?: HTMLDivElement;\n\n // Touch gestures\n private _longPressTimeout: number | null = null;\n private _isLongPress: boolean = false;\n\n // Intersection Observer\n private _observer?: IntersectionObserver;\n\n // Callbacks\n private onItemClick: ((message: InboxMessage) => void) | null = null;\n private onItemLongPress: ((message: InboxMessage) => void) | null = null;\n private onItemActionClick: ((message: InboxMessage, action: InboxAction) => void) | null = null;\n private onItemVisible: ((message: InboxMessage) => void) | null = null;\n\n constructor(themeManager: CourierInboxThemeManager, canClick: boolean, _canLongPress: boolean) {\n super();\n this._canClick = canClick;\n // this._canLongPress = canLongPress;\n this._themeManager = themeManager;\n this._theme = themeManager.getTheme();\n this._isMobile = 'ontouchstart' in window;\n this.render();\n this._setupIntersectionObserver();\n }\n\n private render() {\n\n const contentContainer = document.createElement('div');\n contentContainer.className = 'content-container';\n\n // Title\n this._titleElement = document.createElement('p');\n this._titleElement.className = 'title';\n\n // Subtitle\n this._subtitleElement = document.createElement('p');\n this._subtitleElement.className = 'subtitle';\n\n // Actions\n this._actionsContainer = document.createElement('div');\n this._actionsContainer.className = 'actions-container';\n\n contentContainer.appendChild(this._titleElement);\n contentContainer.appendChild(this._subtitleElement);\n contentContainer.appendChild(this._actionsContainer);\n\n // Time\n this._timeElement = document.createElement('p');\n this._timeElement.className = 'time';\n\n // Unread indicator\n this._unreadIndicator = document.createElement('div');\n this._unreadIndicator.className = 'unread-indicator';\n\n // Action menu\n this._menu = new CourierInboxListItemMenu(this._theme);\n this._menu.setOptions(this._getMenuOptions());\n\n // Append elements into shadow‑DOM\n this.append(this._unreadIndicator, contentContainer, this._timeElement, this._menu);\n\n const cancelPropagation = (e: Event): void => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n this._menu.addEventListener('mousedown', cancelPropagation);\n this._menu.addEventListener('pointerdown', cancelPropagation);\n this._menu.addEventListener('click', cancelPropagation);\n\n this.addEventListener('click', (e) => {\n if (!this._canClick) return;\n if (this._menu && (this._menu.contains(e.target as Node) || e.composedPath().includes(this._menu))) {\n return;\n }\n if (this._message && this.onItemClick && !(e.target instanceof CourierIcon) && !this._isLongPress) {\n this.onItemClick(this._message);\n }\n });\n\n this._setupHoverBehavior();\n this._setupLongPressBehavior();\n\n // Enable clickable class if canClick\n if (this._canClick) {\n this.classList.add('clickable');\n }\n }\n\n private _setupIntersectionObserver(): void {\n // Only set up if running in browser and IntersectionObserver is available\n if (typeof window === \"undefined\" || typeof IntersectionObserver === \"undefined\") {\n return;\n }\n\n // Clean up any previous observer\n if (this._observer) {\n this._observer.disconnect();\n }\n\n this._observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio === 1 && this.onItemVisible && this._message) {\n this.onItemVisible(this._message);\n }\n });\n }, { threshold: 1.0 });\n\n this._observer.observe(this);\n }\n\n onComponentUnmounted() {\n this._observer?.disconnect();\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const list = theme.inbox?.list;\n\n return `\n ${CourierInboxListItem.id} {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n border-bottom: ${list?.item?.divider ?? '1px solid red'};\n font-family: inherit;\n cursor: default;\n transition: background-color 0.2s ease;\n margin: 0;\n width: 100%;\n box-sizing: border-box;\n padding: 12px 20px;\n position: relative;\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: manipulation;\n }\n\n /* Only apply hover/active background if clickable */\n @media (hover: hover) {\n ${CourierInboxListItem.id}.clickable:hover {\n cursor: pointer;\n background-color: ${list?.item?.hoverBackgroundColor ?? 'red'};\n }\n }\n\n ${CourierInboxListItem.id}.clickable:active {\n cursor: pointer;\n background-color: ${list?.item?.activeBackgroundColor ?? 'red'};\n }\n\n /* Menu hover / active */\n @media (hover: hover) {\n ${CourierInboxListItem.id}.clickable:hover:has(courier-inbox-list-item-menu:hover, courier-inbox-list-item-menu *:hover, courier-button:hover, courier-button *:hover) {\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n }\n }\n\n ${CourierInboxListItem.id}.clickable:active:has(courier-inbox-list-item-menu:active, courier-inbox-list-item-menu *:active, courier-button:active, courier-button *:active) {\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n }\n\n ${CourierInboxListItem.id}:last-child {\n border-bottom: none;\n }\n\n ${CourierInboxListItem.id} .unread-indicator {\n position: absolute;\n top: 28px;\n left: 6px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: ${list?.item?.unreadIndicatorColor ?? 'red'};\n display: none;\n }\n\n ${CourierInboxListItem.id}.unread .unread-indicator {\n display: block;\n }\n\n ${CourierInboxListItem.id} .content-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin-right: 12px;\n }\n\n ${CourierInboxListItem.id} p {\n margin: 0;\n overflow-wrap: break-word;\n word-break: break-word;\n hyphens: auto;\n line-height: 1.4;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n text-align: left;\n }\n\n ${CourierInboxListItem.id} .title {\n font-family: ${list?.item?.title?.family ?? 'inherit'};\n font-size: ${list?.item?.title?.size ?? '14px'};\n color: ${list?.item?.title?.color ?? 'red'};\n margin-bottom: 4px;\n }\n\n ${CourierInboxListItem.id} .subtitle {\n font-family: ${list?.item?.subtitle?.family ?? 'inherit'};\n font-size: ${list?.item?.subtitle?.size ?? '14px'};\n color: ${list?.item?.subtitle?.color ?? 'red'};\n }\n\n ${CourierInboxListItem.id} .time {\n font-family: ${list?.item?.time?.family ?? 'inherit'};\n font-size: ${list?.item?.time?.size ?? '14px'};\n color: ${list?.item?.time?.color ?? 'red'};\n text-align: right;\n white-space: nowrap;\n }\n\n ${CourierInboxListItem.id} courier-inbox-list-item-menu {\n z-index: 1;\n position: absolute;\n top: 8px;\n right: 8px;\n display: none;\n }\n\n ${CourierInboxListItem.id} .actions-container {\n display: flex;\n margin-top: 10px;\n flex-wrap: wrap;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n display: none;\n }\n `;\n\n }\n\n private _setupHoverBehavior(): void {\n // Only show menu on hover for non-mobile devices and if canClick\n if (!this._isMobile) {\n this.addEventListener('mouseenter', () => {\n this._isLongPress = false;\n this._showMenu();\n });\n this.addEventListener('mouseleave', () => this._hideMenu());\n }\n }\n\n private _setupLongPressBehavior(): void {\n const menu = this._theme.inbox?.list?.item?.menu\n\n if (!menu?.enabled) {\n return;\n }\n\n const longPress = menu.longPress;\n\n this.addEventListener(\n 'touchstart',\n () => {\n // Start long press timer\n this._longPressTimeout = window.setTimeout(() => {\n this._isLongPress = true;\n this._showMenu();\n if (this._message && this.onItemLongPress) {\n this.onItemLongPress(this._message);\n // Vibrate device if supported\n if (navigator.vibrate) {\n navigator.vibrate(longPress?.vibrationDuration ?? 50);\n }\n }\n // Keep the menu visible for 2 s, then hide again\n setTimeout(() => {\n this._hideMenu();\n this._isLongPress = false;\n }, longPress?.displayDuration ?? 2000);\n }, 650);\n },\n { passive: true },\n );\n\n this.addEventListener('touchend', () => {\n // Clear long press timeout\n if (this._longPressTimeout) {\n window.clearTimeout(this._longPressTimeout);\n this._longPressTimeout = null;\n }\n });\n }\n\n // Helpers\n private _getMenuOptions(): CourierInboxListItemActionMenuOption[] {\n const menuTheme = this._theme.inbox?.list?.item?.menu?.item;\n let options: CourierInboxListItemActionMenuOption[] = [];\n\n const isArchiveFeed = this._feedType === 'archive';\n\n // Only add read/unread option if not in archive feed\n if (!isArchiveFeed) {\n options.push({\n id: this._message?.read ? 'unread' : 'read',\n icon: {\n svg: this._message?.read ? menuTheme?.unread?.svg : menuTheme?.read?.svg,\n color: this._message?.read ? menuTheme?.unread?.color : menuTheme?.read?.color ?? 'red',\n },\n onClick: () => {\n if (this._message) {\n if (this._message.read) {\n CourierInboxDatastore.shared.unreadMessage({ message: this._message });\n } else {\n CourierInboxDatastore.shared.readMessage({ message: this._message });\n }\n }\n },\n });\n }\n\n options.push({\n id: isArchiveFeed ? 'unarchive' : 'archive',\n icon: {\n svg: isArchiveFeed ? menuTheme?.unarchive?.svg : menuTheme?.archive?.svg,\n color: isArchiveFeed ? menuTheme?.unarchive?.color : menuTheme?.archive?.color ?? 'red',\n },\n onClick: () => {\n if (this._message) {\n if (isArchiveFeed) {\n CourierInboxDatastore.shared.unarchiveMessage({ message: this._message });\n } else {\n CourierInboxDatastore.shared.archiveMessage({ message: this._message });\n }\n }\n },\n });\n\n return options;\n }\n\n // Menu visibility helpers\n private _showMenu(): void {\n const menu = this._theme.inbox?.list?.item?.menu;\n\n if (menu && menu.enabled && this._menu && this._timeElement) {\n this._menu.setOptions(this._getMenuOptions());\n this._menu.style.display = 'block';\n this._menu.show();\n this._timeElement.style.opacity = '0';\n }\n }\n\n private _hideMenu(): void {\n const menu = this._theme.inbox?.list?.item?.menu;\n\n if (menu && menu.enabled && this._menu && this._timeElement) {\n this._menu.hide();\n this._menu.style.display = 'none';\n this._timeElement.style.opacity = '1';\n }\n }\n\n // Public API\n public setMessage(message: InboxMessage, feedType: CourierInboxFeedType): void {\n this._message = message;\n this._feedType = feedType;\n this._updateContent();\n }\n\n public setOnItemClick(cb: (message: InboxMessage) => void): void {\n this.onItemClick = cb;\n }\n\n public setOnItemActionClick(cb: (message: InboxMessage, action: InboxAction) => void): void {\n this.onItemActionClick = cb;\n }\n\n public setOnItemLongPress(cb: (message: InboxMessage) => void): void {\n this.onItemLongPress = cb;\n }\n\n public setOnItemVisible(cb: (message: InboxMessage) => void): void {\n this.onItemVisible = cb;\n }\n\n // Content rendering\n private _updateContent(): void {\n\n if (!this._message) {\n if (this._titleElement) this._titleElement.textContent = '';\n if (this._subtitleElement) this._subtitleElement.textContent = '';\n return;\n }\n\n // Unread marker\n this.classList.toggle('unread', !this._message.read && this._feedType !== 'archive');\n\n if (this._titleElement) {\n this._titleElement.textContent = this._message.title || 'Untitled Message';\n }\n if (this._subtitleElement) {\n this._subtitleElement.textContent = this._message.preview || this._message.body || '';\n }\n if (this._timeElement) {\n this._timeElement.textContent = getMessageTime(this._message);\n }\n\n // Update menu icons (e.g. read/unread)\n if (this._menu) {\n this._menu.setOptions(this._getMenuOptions());\n }\n\n // Update actions container\n const hasActions = this._message.actions && this._message.actions.length > 0;\n if (this._actionsContainer) {\n this._actionsContainer.style.display = hasActions ? 'flex' : 'none';\n }\n\n const actionsTheme = this._theme.inbox?.list?.item?.actions;\n\n // Add the actions to the actions container\n if (this._actionsContainer && this._message.actions) {\n this._actionsContainer.innerHTML = \"\"; // Clear previous actions to avoid duplicates\n this._message.actions.forEach(action => {\n // Create the action element\n const actionButton = new CourierButton({\n mode: this._themeManager.mode,\n text: action.content,\n variant: 'secondary',\n backgroundColor: actionsTheme?.backgroundColor,\n hoverBackgroundColor: actionsTheme?.hoverBackgroundColor,\n activeBackgroundColor: actionsTheme?.activeBackgroundColor,\n border: actionsTheme?.border,\n borderRadius: actionsTheme?.borderRadius,\n shadow: actionsTheme?.shadow,\n fontFamily: actionsTheme?.font?.family,\n fontSize: actionsTheme?.font?.size,\n fontWeight: actionsTheme?.font?.weight,\n textColor: actionsTheme?.font?.color,\n onClick: () => {\n if (this._message && this.onItemActionClick) {\n this.onItemActionClick(this._message, action);\n }\n },\n });\n\n // Add the action element to the actions container\n this._actionsContainer?.appendChild(actionButton);\n });\n }\n }\n}\n\nregisterElement(CourierInboxListItem);","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list-item';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonListItem.id, CourierInboxSkeletonListItem.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n // Create skeleton items using CourierSkeletonAnimatedRow\n const firstRow = new CourierSkeletonAnimatedRow(this._theme);\n const secondRow = new CourierSkeletonAnimatedRow(this._theme);\n const thirdRow = new CourierSkeletonAnimatedRow(this._theme);\n\n this.appendChild(firstRow);\n this.appendChild(secondRow);\n this.appendChild(thirdRow);\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxSkeletonListItem.id} {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n width: 100%;\n box-sizing: border-box;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:first-child {\n width: 35%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(2) {\n width: 100%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(3) {\n width: 82%;\n }\n `;\n }\n}\n\n// Register the custom element\nregisterElement(CourierInboxSkeletonListItem);\n\nclass CourierSkeletonAnimatedRow extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-skeleton-animated-row';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierSkeletonAnimatedRow.id, CourierSkeletonAnimatedRow.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n const skeletonItem = document.createElement('div');\n skeletonItem.className = 'skeleton-item';\n this.appendChild(skeletonItem);\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n const color = theme.inbox?.loading?.animation?.barColor ?? '#000';\n\n // Handle both 3 and 6 character hex colors\n const hexColor = color.length === 4 ?\n `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` :\n color;\n\n // Convert hex to RGB\n const r = parseInt(hexColor.slice(1, 3), 16);\n const g = parseInt(hexColor.slice(3, 5), 16);\n const b = parseInt(hexColor.slice(5, 7), 16);\n\n const colorWithAlpha80 = `rgba(${r}, ${g}, ${b}, 0.8)`; // 80% opacity\n const colorWithAlpha40 = `rgba(${r}, ${g}, ${b}, 0.4)`; // 40% opacity\n\n return `\n ${CourierSkeletonAnimatedRow.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n }\n\n ${CourierSkeletonAnimatedRow.id} .skeleton-item {\n height: ${theme.inbox?.loading?.animation?.barHeight ?? '14px'};\n width: 100%;\n background: linear-gradient(\n 90deg,\n ${colorWithAlpha80} 25%,\n ${colorWithAlpha40} 50%,\n ${colorWithAlpha80} 75%\n );\n background-size: 200% 100%;\n animation: ${CourierSkeletonAnimatedRow.id}-shimmer ${theme.inbox?.loading?.animation?.duration ?? '2s'} ease-in-out infinite;\n border-radius: ${theme.inbox?.loading?.animation?.barBorderRadius ?? '14px'};\n }\n\n @keyframes ${CourierSkeletonAnimatedRow.id}-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n `;\n }\n}\n\nregisterElement(CourierSkeletonAnimatedRow);\n","import { CourierFactoryElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxSkeletonListItem } from \"./courier-inbox-skeleton-list-item\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonList extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonList.id, CourierInboxSkeletonList.getStyles(this._theme));\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n defaultElement(): HTMLElement {\n const list = document.createElement('div');\n list.className = 'list';\n\n // Create skeleton items\n for (let i = 0; i < 3; i++) {\n const skeletonItem = new CourierInboxSkeletonListItem(this._theme); // TODO: Make this a prop\n list.appendChild(skeletonItem);\n }\n\n this.appendChild(list);\n return list;\n\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxSkeletonList.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list {\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list > * {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 100%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(2) {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 88%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(3) {\n border-bottom: none;\n opacity: 50%;\n }\n `;\n\n }\n}\n\nregisterElement(CourierInboxSkeletonList);\n","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxSkeletonList } from \"./courier-inbox-skeleton-list\";\n\nexport class CourierInboxPaginationListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-pagination-list-item';\n }\n\n // State\n private _theme: CourierInboxTheme;\n\n // Components\n private _style?: HTMLStyleElement;\n private _skeletonLoadingList?: CourierInboxSkeletonList;\n private _observer?: IntersectionObserver;\n private _customItem?: HTMLElement;\n\n // Handlers\n private _onPaginationTrigger: () => void;\n\n constructor(props: { theme: CourierInboxTheme, customItem?: HTMLElement, onPaginationTrigger: () => void }) {\n super();\n this._theme = props.theme;\n this._customItem = props.customItem;\n this._onPaginationTrigger = props.onPaginationTrigger;\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxPaginationListItem.id, CourierInboxPaginationListItem.getStyles(this._theme));\n\n if (this._customItem) {\n this.appendChild(this._customItem);\n } else {\n const container = document.createElement('div');\n container.className = 'skeleton-container';\n\n this._skeletonLoadingList = new CourierInboxSkeletonList(this._theme);\n this._skeletonLoadingList.build(undefined);\n container.appendChild(this._skeletonLoadingList);\n\n this.appendChild(container);\n }\n\n // Initialize intersection observer\n this._observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this._onPaginationTrigger();\n }\n });\n });\n\n // Start observing the element\n this._observer.observe(this);\n\n }\n\n onComponentUnmounted() {\n this._observer?.disconnect();\n this._style?.remove();\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxPaginationListItem.id} {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n }\n\n ${CourierInboxPaginationListItem.id} .skeleton-container {\n height: 150%;\n }\n `;\n }\n\n}\n\nregisterElement(CourierInboxPaginationListItem);\n","import { InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\n\nexport function markAsRead(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.readMessage({ message });\n}\n\nexport function markAsUnread(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.unreadMessage({ message });\n}\n\nexport function clickMessage(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.clickMessage({ message });\n}\n\nexport function archiveMessage(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.archiveMessage({ message });\n}\n\nexport function openMessage(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.openMessage({ message });\n}\n","import { InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierBaseElement, CourierInfoState, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxListItem } from \"./courier-inbox-list-item\";\nimport { CourierInboxPaginationListItem } from \"./courier-inbox-pagination-list-item\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxStateErrorFactoryProps, CourierInboxStateEmptyFactoryProps, CourierInboxStateLoadingFactoryProps, CourierInboxListItemFactoryProps, CourierInboxPaginationItemFactoryProps } from \"../types/factories\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxSkeletonList } from \"./courier-inbox-skeleton-list\";\nimport { CourierInboxListItemMenu } from \"./courier-inbox-list-item-menu\";\nimport { openMessage } from \"../utils/extensions\";\n\nexport class CourierInboxList extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _messages: InboxMessage[] = [];\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isLoading = true;\n private _error: Error | null = null;\n private _canPaginate = false;\n private _canClickListItems = false;\n private _canLongPressListItems = false;\n\n // Callbacks\n private _onMessageClick: ((message: InboxMessage, index: number) => void) | null = null;\n private _onMessageActionClick: ((message: InboxMessage, action: InboxAction, index: number) => void) | null = null;\n private _onMessageLongPress: ((message: InboxMessage, index: number) => void) | null = null;\n private _onRefresh: () => void;\n\n // Factories\n private _onPaginationTrigger?: (feedType: CourierInboxFeedType) => void;\n private _listItemFactory?: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement;\n private _paginationItemFactory?: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement;\n private _loadingStateFactory?: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement;\n private _emptyStateFactory?: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement;\n private _errorStateFactory?: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement;\n\n // Getters\n public get messages(): InboxMessage[] {\n return this._messages;\n }\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n // Components\n private _listStyles?: HTMLStyleElement;\n private _listItemStyles?: HTMLStyleElement;\n private _listItemMenuStyles?: HTMLStyleElement;\n private _errorContainer?: CourierInfoState;\n private _emptyContainer?: CourierInfoState;\n\n constructor(props: {\n themeManager: CourierInboxThemeManager,\n canClickListItems: boolean,\n canLongPressListItems: boolean,\n onRefresh: () => void,\n onPaginationTrigger: (feedType: CourierInboxFeedType) => void,\n onMessageClick: (message: InboxMessage, index: number) => void,\n onMessageActionClick: (message: InboxMessage, action: InboxAction, index: number) => void,\n onMessageLongPress: (message: InboxMessage, index: number) => void\n }) {\n super();\n\n // Initialize the callbacks\n this._onRefresh = props.onRefresh;\n this._onPaginationTrigger = props.onPaginationTrigger;\n this._onMessageClick = props.onMessageClick;\n this._onMessageActionClick = props.onMessageActionClick;\n this._onMessageLongPress = props.onMessageLongPress;\n\n // Initialize the theme subscription\n this._themeSubscription = props.themeManager.subscribe((_: CourierInboxTheme) => {\n this.render();\n });\n\n }\n\n onComponentMounted() {\n\n // Inject styles at head\n // Since list items and menus don't listen to theme changes directly, their styles are created\n // at the parent level, and the parent manages their theming updates.\n this._listStyles = injectGlobalStyle(CourierInboxList.id, CourierInboxList.getStyles(this.theme));\n this._listItemStyles = injectGlobalStyle(CourierInboxListItem.id, CourierInboxListItem.getStyles(this.theme));\n this._listItemMenuStyles = injectGlobalStyle(CourierInboxListItemMenu.id, CourierInboxListItemMenu.getStyles(this.theme));\n\n // Layout the component\n this.render();\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._listStyles?.remove();\n this._listItemStyles?.remove();\n this._listItemMenuStyles?.remove();\n }\n\n public setCanClickListItems(canClick: boolean) {\n this._canClickListItems = canClick;\n }\n\n public setCanLongPressListItems(canLongPress: boolean) {\n this._canLongPressListItems = canLongPress;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const list = theme.inbox?.list;\n\n return `\n ${CourierInboxList.id} {\n flex: 1;\n width: 100%;\n background-color: ${list?.backgroundColor ?? 'red'};\n }\n\n ${CourierInboxList.id} ul {\n list-style: none;\n padding: 0;\n margin: 0;\n height: 100%;\n }\n `;\n\n }\n\n public setDataSet(dataSet: InboxDataSet): void {\n this._messages = [...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addPage(dataSet: InboxDataSet): void {\n this._messages = [...this._messages, ...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addMessage(message: InboxMessage, index = 0): void {\n this._messages.splice(index, 0, message);\n this.render();\n }\n\n public removeMessage(index = 0): void {\n this._messages.splice(index, 1);\n this.render();\n }\n\n public updateMessage(message: InboxMessage, index = 0): void {\n this._messages[index] = message;\n this.render();\n }\n\n public setFeedType(feedType: CourierInboxFeedType): void {\n this._feedType = feedType;\n this._error = null;\n this._isLoading = true;\n this.render();\n }\n\n public setLoading(isLoading: boolean): void {\n this._error = null;\n this._isLoading = isLoading;\n this.render();\n }\n\n public setError(error: Error | null): void {\n this._error = error;\n this._isLoading = false;\n this._messages = [];\n this.render();\n }\n\n public setErrorNoClient(): void {\n this.setError(new Error('No user signed in'));\n }\n\n private handleRetry(): void {\n this._onRefresh();\n }\n\n private handleRefresh(): void {\n this._onRefresh();\n }\n\n public refreshInfoStateThemes() {\n this._emptyContainer?.updateStyles(this.errorProps);\n this._emptyContainer?.updateStyles(this.emptyProps);\n }\n\n get errorProps(): any {\n const error = this.theme.inbox?.error;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: error?.title?.text ?? this._error?.message,\n textColor: error?.title?.font?.color,\n fontFamily: error?.title?.font?.family,\n fontSize: error?.title?.font?.size,\n fontWeight: error?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: error?.button?.text,\n backgroundColor: error?.button?.backgroundColor,\n hoverBackgroundColor: error?.button?.hoverBackgroundColor,\n activeBackgroundColor: error?.button?.activeBackgroundColor,\n textColor: error?.button?.font?.color,\n fontFamily: error?.button?.font?.family,\n fontSize: error?.button?.font?.size,\n fontWeight: error?.button?.font?.weight,\n shadow: error?.button?.shadow,\n border: error?.button?.border,\n borderRadius: error?.button?.borderRadius,\n onClick: () => this.handleRetry()\n }\n };\n }\n\n get emptyProps(): any {\n const empty = this.theme.inbox?.empty;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: empty?.title?.text ?? `No ${this._feedType} messages yet`,\n textColor: empty?.title?.font?.color,\n fontFamily: empty?.title?.font?.family,\n fontSize: empty?.title?.font?.size,\n fontWeight: empty?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: empty?.button?.text,\n backgroundColor: empty?.button?.backgroundColor,\n hoverBackgroundColor: empty?.button?.hoverBackgroundColor,\n activeBackgroundColor: empty?.button?.activeBackgroundColor,\n textColor: empty?.button?.font?.color,\n fontFamily: empty?.button?.font?.family,\n fontSize: empty?.button?.font?.size,\n fontWeight: empty?.button?.font?.weight,\n shadow: empty?.button?.shadow,\n border: empty?.button?.border,\n borderRadius: empty?.button?.borderRadius,\n onClick: () => this.handleRefresh()\n },\n };\n }\n\n private render(): void {\n\n // Remove all existing elements\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n this._errorContainer = undefined;\n this._emptyContainer = undefined;\n }\n\n // Update list styles\n if (this._listStyles) {\n this._listStyles.textContent = CourierInboxList.getStyles(this.theme);\n }\n\n // Update list item styles\n if (this._listItemStyles) {\n this._listItemStyles.textContent = CourierInboxListItem.getStyles(this.theme);\n }\n\n // Update list item menu styles\n if (this._listItemMenuStyles) {\n this._listItemMenuStyles.textContent = CourierInboxListItemMenu.getStyles(this.theme);\n }\n\n // Error state\n if (this._error) {\n this._errorContainer = new CourierInfoState(this.errorProps);\n this._errorContainer.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n this.appendChild(this._errorContainer);\n return;\n }\n\n // Loading state\n if (this._isLoading) {\n const loadingElement = new CourierInboxSkeletonList(this.theme);\n loadingElement.build(this._loadingStateFactory?.({ feedType: this._feedType }));\n this.appendChild(loadingElement);\n return;\n }\n\n // Empty state\n if (this._messages.length === 0) {\n this._emptyContainer = new CourierInfoState(this.emptyProps);\n this._emptyContainer.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n this.appendChild(this._emptyContainer);\n return;\n }\n\n // Create list before adding messages\n const list = document.createElement('ul');\n this.appendChild(list);\n\n // Add messages to the list\n this._messages.forEach((message, index) => {\n if (this._listItemFactory) {\n list.appendChild(this._listItemFactory({ message, index }));\n return;\n }\n const listItem = new CourierInboxListItem(this._themeSubscription.manager, this._canClickListItems, this._canLongPressListItems);\n listItem.setMessage(message, this._feedType);\n listItem.setOnItemClick((message) => this._onMessageClick?.(message, index));\n listItem.setOnItemActionClick((message, action) => this._onMessageActionClick?.(message, action, index));\n listItem.setOnItemLongPress((message) => this._onMessageLongPress?.(message, index));\n listItem.setOnItemVisible((message) => this.openVisibleMessage(message))\n list.appendChild(listItem);\n });\n\n // Add pagination item if can paginate\n if (this._canPaginate) {\n const paginationItem = new CourierInboxPaginationListItem({\n theme: this.theme,\n customItem: this._paginationItemFactory?.({ feedType: this._feedType }),\n onPaginationTrigger: () => this._onPaginationTrigger?.(this._feedType),\n });\n list.appendChild(paginationItem);\n }\n }\n\n private async openVisibleMessage(message: InboxMessage) {\n try {\n await openMessage(message);\n } catch (error) {\n // Error ignored. Will get logged in the openMessage function\n }\n }\n\n // Factories\n public setLoadingStateFactory(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement): void {\n this._loadingStateFactory = factory;\n this.render();\n }\n\n public setEmptyStateFactory(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement): void {\n this._emptyStateFactory = factory;\n this.render();\n }\n\n public setErrorStateFactory(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement): void {\n this._errorStateFactory = factory;\n this.render();\n }\n\n public setListItemFactory(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement): void {\n this._listItemFactory = factory;\n this.render();\n }\n\n public setPaginationItemFactory(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement): void {\n this._paginationItemFactory = factory;\n this.render();\n }\n\n}\n\nregisterElement(CourierInboxList);\n","import { CourierBaseElement, CourierIcon, CourierIconSVGs, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\n\nexport class CourierInboxOptionMenuItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-option-menu-item';\n }\n\n // State\n private _option: CourierInboxMenuOption;\n private _isSelectedable: boolean;\n private _isSelected?: boolean;\n\n // Components\n private _content?: HTMLDivElement;\n private _itemIcon?: CourierIcon;\n private _title?: HTMLParagraphElement;\n private _selectionIcon?: CourierIcon;\n\n constructor(props: { option: CourierInboxMenuOption, selectable: boolean, isSelected: boolean, themeManager: CourierInboxThemeManager }) {\n super();\n this._option = props.option;\n this._isSelected = props.isSelected;\n this._isSelectedable = props.selectable;\n }\n\n onComponentMounted() {\n\n this._content = document.createElement('div');\n this._content.className = 'menu-item';\n\n this._itemIcon = new CourierIcon(this._option.icon.svg ?? CourierIconSVGs.inbox);\n this._itemIcon.setAttribute('size', '16');\n\n this._title = document.createElement('p');\n this._title.textContent = this._option.text;\n\n const spacer = document.createElement('div');\n spacer.className = 'spacer';\n\n this._selectionIcon = new CourierIcon(CourierIconSVGs.check);\n\n this._content.appendChild(this._itemIcon);\n this._content.appendChild(this._title);\n this._content.appendChild(spacer);\n\n // Add check icon if selectable\n if (this._isSelectedable) {\n this._content.appendChild(this._selectionIcon);\n }\n\n this.appendChild(this._content);\n\n this._selectionIcon.style.display = this._isSelected ? 'block' : 'none';\n\n this.refreshTheme();\n\n }\n\n public refreshTheme() {\n\n // Set selected icon color\n this._selectionIcon?.updateColor(this._option.selectionIcon?.color ?? 'red');\n this._selectionIcon?.updateSVG(this._option.selectionIcon?.svg ?? CourierIconSVGs.check);\n\n if (this._title) {\n this._title.textContent = this._option.text ?? 'Missing Text';\n }\n\n this._itemIcon?.updateColor(this._option.icon?.color ?? 'red');\n this._itemIcon?.updateSVG(this._option.icon?.svg ?? CourierIconSVGs.inbox);\n\n }\n\n}\n\nregisterElement(CourierInboxOptionMenuItem);\n","import { CourierBaseElement, CourierIconButton, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxOptionMenuItem } from \"./courier-inbox-option-menu-item\";\nimport { CourierInboxHeaderMenuItemId } from \"./courier-inbox-header\";\nimport { CourierInboxIconTheme } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxMenuOptionType = 'filters' | 'actions';\n\nexport type CourierInboxMenuOption = {\n id: CourierInboxHeaderMenuItemId;\n text: string;\n icon: CourierInboxIconTheme;\n selectionIcon?: CourierInboxIconTheme | null;\n onClick: (option: CourierInboxMenuOption) => void;\n};\n\nexport class CourierInboxOptionMenu extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-option-menu';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _type: CourierInboxMenuOptionType;\n private _selectedIndex: number = 0;\n private _options: CourierInboxMenuOption[];\n private _selectable: boolean;\n private _onMenuOpen: () => void;\n\n // Components\n private _menuButton?: CourierIconButton;\n private _menu?: HTMLDivElement;\n private _style?: HTMLStyleElement;\n\n constructor(themeManager: CourierInboxThemeManager, type: CourierInboxMenuOptionType, selectable: boolean, options: CourierInboxMenuOption[], onMenuOpen: () => void) {\n super();\n\n this._type = type;\n this._selectable = selectable;\n this._options = options;\n this._selectedIndex = 0;\n this._onMenuOpen = onMenuOpen;\n\n // Handle the theme change\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxOptionMenu.id, this.getStyles());\n\n this._menuButton = new CourierIconButton(this._type === 'filters' ? CourierIconSVGs.filter : CourierIconSVGs.overflow);\n this._menu = document.createElement('div');\n this._menu.className = `menu ${this._type}`;\n\n this.appendChild(this._menuButton);\n this.appendChild(this._menu);\n\n this._menuButton.addEventListener('click', this.toggleMenu.bind(this));\n document.addEventListener('click', this.handleOutsideClick.bind(this));\n\n this.refreshTheme();\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private getStyles(): string {\n const theme = this._themeSubscription.manager.getTheme();\n\n return `\n ${CourierInboxOptionMenu.id} {\n position: relative;\n display: inline-block;\n }\n\n ${CourierInboxOptionMenu.id} .menu {\n display: none;\n position: absolute;\n top: 42px;\n right: -6px;\n border-radius: ${theme.inbox?.header?.menus?.popup?.borderRadius ?? '6px'};\n border: ${theme.inbox?.header?.menus?.popup?.border ?? '1px solid red'};\n background: ${theme.inbox?.header?.menus?.popup?.backgroundColor ?? 'red'};\n box-shadow: ${theme.inbox?.header?.menus?.popup?.shadow ?? '0 4px 12px 0 red'};\n z-index: 1000;\n min-width: 200px;\n overflow: hidden;\n padding: 4px 0;\n }\n\n ${CourierInboxOptionMenu.id} courier-inbox-filter-menu-item {\n border-bottom: ${theme.inbox?.header?.menus?.popup?.list?.divider ?? 'none'};\n }\n\n ${CourierInboxOptionMenu.id} courier-inbox-filter-menu-item:last-child {\n border-bottom: none;\n }\n\n ${CourierInboxOptionMenuItem.id} {\n display: flex;\n flex-direction: row;\n padding: 6px 12px;\n cursor: pointer;\n }\n\n ${CourierInboxOptionMenuItem.id}:hover {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.hoverBackgroundColor ?? 'red'};\n }\n\n ${CourierInboxOptionMenuItem.id}:active {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.activeBackgroundColor ?? 'red'};\n }\n\n ${CourierInboxOptionMenuItem.id} .menu-item {\n display: flex;\n align-items: center;\n width: 100%;\n gap: 12px;\n }\n\n ${CourierInboxOptionMenuItem.id} .spacer {\n flex: 1;\n }\n\n ${CourierInboxOptionMenuItem.id} p {\n margin: 0;\n font-family: ${theme.inbox?.header?.menus?.popup?.list?.font?.family ?? 'inherit'};\n font-weight: ${theme.inbox?.header?.menus?.popup?.list?.font?.weight ?? 'inherit'};\n font-size: ${theme.inbox?.header?.menus?.popup?.list?.font?.size ?? '14px'};\n color: ${theme.inbox?.header?.menus?.popup?.list?.font?.color ?? 'red'};\n white-space: nowrap;\n }\n\n ${CourierInboxOptionMenuItem.id} .check-icon {\n display: none;\n }\n `;\n }\n\n private refreshTheme() {\n // Update styles\n if (this._style) {\n this._style.textContent = this.getStyles();\n }\n\n // Get theme\n const theme = this._themeSubscription.manager.getTheme();\n\n // Get menu\n const menu = theme.inbox?.header?.menus;\n const isFilter = this._type === 'filters';\n const buttonConfig = isFilter ? menu?.filters?.button : menu?.actions?.button;\n const defaultIcon = isFilter ? CourierIconSVGs.filter : CourierIconSVGs.overflow;\n\n this._menuButton?.updateIconSVG(buttonConfig?.icon?.svg ?? defaultIcon);\n this._menuButton?.updateIconColor(buttonConfig?.icon?.color ?? 'red');\n this._menuButton?.updateBackgroundColor(buttonConfig?.backgroundColor ?? 'transparent');\n this._menuButton?.updateHoverBackgroundColor(buttonConfig?.hoverBackgroundColor ?? 'red');\n this._menuButton?.updateActiveBackgroundColor(buttonConfig?.activeBackgroundColor ?? 'red');\n\n // Reload menu items\n this.refreshMenuItems();\n }\n\n public setOptions(options: CourierInboxMenuOption[]) {\n this._options = options;\n this.refreshMenuItems();\n }\n\n private refreshMenuItems() {\n if (this._menu) {\n this._menu.innerHTML = '';\n }\n\n this._options.forEach((option, index) => {\n const menuItem = new CourierInboxOptionMenuItem({\n option: option,\n selectable: this._selectable,\n isSelected: this._selectedIndex === index,\n themeManager: this._themeSubscription.manager\n });\n\n menuItem.addEventListener('click', () => {\n this._selectedIndex = index;\n option.onClick(option);\n this.refreshMenuItems();\n this.closeMenu();\n });\n\n this._menu?.appendChild(menuItem);\n });\n }\n\n private toggleMenu(event: Event) {\n event.stopPropagation();\n const isOpening = this._menu?.style.display !== 'block';\n if (this._menu) {\n this._menu.style.display = isOpening ? 'block' : 'none';\n }\n\n if (isOpening) {\n this._onMenuOpen();\n }\n }\n\n private handleOutsideClick(event: MouseEvent) {\n if (!this.contains(event.target as Node)) {\n this.closeMenu();\n }\n }\n\n public closeMenu() {\n if (this._menu) {\n this._menu.style.display = 'none';\n }\n }\n\n public selectOption(option: CourierInboxMenuOption) {\n this._selectedIndex = this._options.findIndex(o => o.id === option.id);\n this.refreshMenuItems();\n }\n\n}\n\nregisterElement(CourierInboxOptionMenu);\n","import { CourierBaseElement, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\n\nexport type CourierUnreadCountLocation = 'button' | 'header';\n\nexport class CourierUnreadCountBadge extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-unread-count-badge';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _location: CourierUnreadCountLocation;\n private _count: number = 0;\n\n // Elements\n private _badge?: HTMLElement;\n private _style?: HTMLStyleElement;\n\n get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(props: { themeBus: CourierInboxThemeManager, location: CourierUnreadCountLocation }) {\n super();\n this._location = props.location;\n this._themeSubscription = props.themeBus.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme(this._location);\n });\n }\n\n onComponentMounted() {\n\n // Create badge element\n this._badge = document.createElement('span');\n this._badge.className = `unread-badge ${this._location}`;\n\n this.appendChild(this._badge);\n this.updateBadge();\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n return `\n ${CourierUnreadCountBadge.id} {\n display: inline-block;\n }\n\n ${CourierUnreadCountBadge.id} .unread-badge {\n padding: 3px 8px;\n font-size: 12px;\n text-align: center;\n display: none;\n pointer-events: none;\n }\n\n ${CourierUnreadCountBadge.id} .header {\n background-color: ${theme.inbox?.header?.filters?.unreadIndicator?.backgroundColor};\n color: ${theme.inbox?.header?.filters?.unreadIndicator?.font?.color};\n border-radius: ${theme.inbox?.header?.filters?.unreadIndicator?.borderRadius};\n font-size: ${theme.inbox?.header?.filters?.unreadIndicator?.font?.size};\n padding: ${theme.inbox?.header?.filters?.unreadIndicator?.padding};\n }\n `\n }\n\n public setCount(count: number) {\n this._count = count;\n this.updateBadge();\n }\n\n public refreshTheme(location: CourierUnreadCountLocation) {\n this._location = location;\n this.updateBadge();\n }\n\n private updateBadge() {\n if (this._badge) {\n if (this._count > 0) {\n this._badge.textContent = this._count > 99 ? '99+' : this._count.toString();\n this._badge.style.display = 'block';\n } else {\n this._badge.style.display = 'none';\n }\n }\n }\n}\n\nregisterElement(CourierUnreadCountBadge);\n","import { CourierBaseElement, CourierIcon, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\nimport { CourierUnreadCountBadge } from \"./courier-unread-count-badge\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxHeaderTitle extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-header-title';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _option: CourierInboxMenuOption;\n private _feedType?: CourierInboxFeedType;\n\n // Components\n private _style?: HTMLStyleElement;\n private _titleElement?: HTMLHeadingElement;\n private _iconElement?: CourierIcon;\n private _unreadBadge?: CourierUnreadCountBadge;\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(themeManager: CourierInboxThemeManager, option: CourierInboxMenuOption) {\n super();\n\n this._option = option;\n\n // Subscribe to the theme bus\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme(this._feedType ?? 'inbox');\n });\n\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxHeaderTitle.id} {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n }\n\n ${CourierInboxHeaderTitle.id} courier-icon {\n display: flex;\n align-items: center;\n }\n\n ${CourierInboxHeaderTitle.id} h2 {\n margin: 0;\n font-family: ${theme.inbox?.header?.filters?.font?.family ?? 'inherit'};\n font-size: ${theme.inbox?.header?.filters?.font?.size ?? '18px'};\n font-weight: ${theme.inbox?.header?.filters?.font?.weight ?? '500'};\n color: ${theme.inbox?.header?.filters?.font?.color ?? 'red'};\n }\n\n ${CourierInboxHeaderTitle.id} courier-unread-count-badge {\n margin-left: 4px;\n }\n `;\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxHeaderTitle.id, CourierInboxHeaderTitle.getStyles(this.theme));\n\n this._iconElement = new CourierIcon(undefined, this._option.icon.svg);\n this._titleElement = document.createElement('h2');\n this._unreadBadge = new CourierUnreadCountBadge({\n themeBus: this._themeSubscription.manager,\n location: 'header'\n });\n\n this.appendChild(this._iconElement);\n this.appendChild(this._titleElement);\n this.appendChild(this._unreadBadge);\n\n this.refreshTheme(this._feedType ?? 'inbox');\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private refreshTheme(feedType: CourierInboxFeedType) {\n this._feedType = feedType;\n if (this._style) {\n this._style.textContent = CourierInboxHeaderTitle.getStyles(this.theme);\n }\n this._unreadBadge?.refreshTheme('header');\n this.updateFilter();\n }\n\n public updateSelectedOption(option: CourierInboxMenuOption, feedType: CourierInboxFeedType, unreadCount: number) {\n this._option = option;\n this._feedType = feedType;\n this._unreadBadge?.setCount(unreadCount);\n this.updateFilter();\n }\n\n private updateFilter() {\n const theme = this._themeSubscription.manager.getTheme();\n switch (this._feedType) {\n case 'inbox':\n if (this._titleElement) {\n this._titleElement.textContent = theme.inbox?.header?.filters?.inbox?.text ?? 'Inbox';\n }\n this._iconElement?.updateSVG(theme.inbox?.header?.filters?.inbox?.icon?.svg ?? CourierIconSVGs.inbox);\n this._iconElement?.updateColor(theme.inbox?.header?.filters?.inbox?.icon?.color ?? 'red');\n break;\n case 'archive':\n if (this._titleElement) {\n this._titleElement.textContent = theme.inbox?.header?.filters?.archive?.text ?? 'Archive';\n }\n this._iconElement?.updateSVG(theme.inbox?.header?.filters?.archive?.icon?.svg ?? CourierIconSVGs.archive);\n this._iconElement?.updateColor(theme.inbox?.header?.filters?.archive?.icon?.color ?? 'red');\n break;\n }\n }\n}\n\nregisterElement(CourierInboxHeaderTitle);","import { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierIconSVGs, CourierFactoryElement, registerElement, CourierColors, injectGlobalStyle } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxOptionMenu, CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\nimport { CourierInboxHeaderTitle } from \"./courier-inbox-header-title\";\nimport { CourierInboxHeaderFactoryProps } from \"../types/factories\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxHeaderMenuItemId = CourierInboxFeedType | 'markAllRead' | 'archiveAll' | 'archiveRead';\n\nexport class CourierInboxHeader extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-header';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _feedType: CourierInboxFeedType = 'inbox';\n private _unreadCount: number = 0;\n\n // Components\n private _titleSection?: CourierInboxHeaderTitle;\n private _filterMenu?: CourierInboxOptionMenu;\n private _actionMenu?: CourierInboxOptionMenu;\n private _style?: HTMLStyleElement;\n\n // Callbacks\n private _onFeedTypeChange: (feedType: CourierInboxFeedType) => void;\n\n static get observedAttributes() {\n return ['icon', 'title', 'feed-type'];\n }\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(props: { themeManager: CourierInboxThemeManager, onFeedTypeChange: (feedType: CourierInboxFeedType) => void }) {\n super();\n\n // Subscribe to the theme bus\n this._themeSubscription = props.themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Set the on feed type change callback\n this._onFeedTypeChange = props.onFeedTypeChange;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxHeader.id, CourierInboxHeader.getStyles(this.theme));\n }\n\n onComponentUmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private getFilterOptions(): CourierInboxMenuOption[] {\n const theme = this._themeSubscription.manager.getTheme();\n const filterMenu = theme.inbox?.header?.menus?.filters;\n\n return [\n {\n id: 'inbox',\n text: filterMenu?.inbox?.text ?? 'Inbox',\n icon: {\n color: filterMenu?.inbox?.icon?.color ?? 'red',\n svg: filterMenu?.inbox?.icon?.svg ?? CourierIconSVGs.inbox\n },\n selectionIcon: {\n color: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.color ?? 'red',\n svg: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.svg ?? CourierIconSVGs.check\n },\n onClick: (option: CourierInboxMenuOption) => {\n this.handleOptionMenuItemClick('inbox', option);\n }\n },\n {\n id: 'archive',\n text: filterMenu?.archive?.text ?? 'Archive',\n icon: {\n color: filterMenu?.archive?.icon?.color ?? 'red',\n svg: filterMenu?.archive?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: {\n color: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.color ?? 'red',\n svg: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.svg ?? CourierIconSVGs.check\n },\n onClick: (option: CourierInboxMenuOption) => {\n this.handleOptionMenuItemClick('archive', option);\n }\n }\n ];\n }\n\n private getActionOptions(): CourierInboxMenuOption[] {\n const theme = this._themeSubscription.manager.getTheme();\n const actionMenu = theme.inbox?.header?.menus?.actions;\n\n return [\n {\n id: 'markAllRead',\n text: actionMenu?.markAllRead?.text ?? 'Mark All as Read',\n icon: {\n color: actionMenu?.markAllRead?.icon?.color ?? 'red',\n svg: actionMenu?.markAllRead?.icon?.svg ?? CourierIconSVGs.inbox\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.readAllMessages({ canCallApi: true });\n }\n },\n {\n id: 'archiveAll',\n text: actionMenu?.archiveAll?.text ?? 'Archive All',\n icon: {\n color: actionMenu?.archiveAll?.icon?.color ?? 'red',\n svg: actionMenu?.archiveAll?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.archiveAllMessages({ canCallApi: true });\n }\n },\n {\n id: 'archiveRead',\n text: actionMenu?.archiveRead?.text ?? 'Archive Read',\n icon: {\n color: actionMenu?.archiveRead?.icon?.color ?? 'red',\n svg: actionMenu?.archiveRead?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.archiveReadMessages({ canCallApi: true });\n }\n }\n ];\n }\n\n private refreshTheme() {\n\n if (this._style) {\n this._style.textContent = CourierInboxHeader.getStyles(this.theme);\n }\n\n // Update menus\n this._filterMenu?.setOptions(this.getFilterOptions());\n this._actionMenu?.setOptions(this.getActionOptions());\n }\n\n private handleOptionMenuItemClick(feedType: CourierInboxFeedType, option: CourierInboxMenuOption) {\n this._feedType = feedType;\n if (this._titleSection) {\n this._titleSection.updateSelectedOption(option, this._feedType, this._feedType === 'inbox' ? this._unreadCount : 0);\n }\n this._onFeedTypeChange(feedType);\n }\n\n public render(props: CourierInboxHeaderFactoryProps): void {\n this._feedType = props.feedType;\n this._unreadCount = props.unreadCount;\n const option = this.getFilterOptions().find(opt => ['inbox', 'archive'].includes(opt.id) && opt.id === this._feedType);\n if (option) {\n this._titleSection?.updateSelectedOption(option, this._feedType, this._feedType === 'inbox' ? this._unreadCount : 0);\n this._filterMenu?.selectOption(option);\n }\n }\n\n build(newElement: HTMLElement | undefined | null) {\n super.build(newElement);\n this.refreshTheme();\n }\n\n defaultElement(): HTMLElement {\n const filterOptions = this.getFilterOptions();\n\n this._titleSection = new CourierInboxHeaderTitle(this._themeSubscription.manager, filterOptions[0]);\n this._filterMenu = new CourierInboxOptionMenu(this._themeSubscription.manager, 'filters', true, filterOptions, () => {\n this._actionMenu?.closeMenu();\n });\n this._actionMenu = new CourierInboxOptionMenu(this._themeSubscription.manager, 'actions', false, this.getActionOptions(), () => {\n this._filterMenu?.closeMenu();\n });\n\n // Selected default menu\n this._filterMenu.selectOption(filterOptions[0]);\n\n // Create flexible spacer\n const spacer = document.createElement('div');\n spacer.className = 'spacer';\n\n // Create and setup actions section\n const actions = document.createElement('div');\n actions.className = 'actions';\n actions.appendChild(this._filterMenu);\n actions.appendChild(this._actionMenu);\n\n const headerContent = document.createElement('div');\n headerContent.className = 'header-content';\n headerContent.appendChild(this._titleSection);\n headerContent.appendChild(spacer);\n headerContent.appendChild(actions);\n\n return headerContent;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxHeader.id} {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n ${CourierInboxHeader.id} .header-content {\n padding: 10px 10px 10px 16px;\n background-color: ${theme.inbox?.header?.backgroundColor ?? CourierColors.white[500]};\n box-shadow: ${theme.inbox?.header?.shadow ?? `0px 1px 0px 0px red`};\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 1;\n z-index: 100;\n }\n\n ${CourierInboxHeader.id} .spacer {\n flex: 1;\n }\n\n ${CourierInboxHeader.id} .actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n `;\n }\n\n}\n\nregisterElement(CourierInboxHeader);\n","import { CourierInboxDatastore } from \"./datastore\";\nimport { CourierInboxDatastoreEvents } from \"./datatore-events\";\n\nexport class CourierInboxDataStoreListener {\n readonly events: CourierInboxDatastoreEvents;\n\n constructor(events: CourierInboxDatastoreEvents) {\n this.events = events;\n }\n\n remove() {\n CourierInboxDatastore.shared.removeDataStoreListener(this);\n }\n\n}\n","import { CourierColors, CourierIconSVGs, SystemThemeMode, CourierFontTheme, CourierIconTheme, CourierButtonTheme, CourierIconButtonTheme } from \"@trycourier/courier-ui-core\";\n\n// Re-export common types from core for convenience\nexport type CourierInboxFontTheme = CourierFontTheme;\nexport type CourierInboxIconTheme = CourierIconTheme;\nexport type CourierInboxButtonTheme = CourierButtonTheme;\nexport type CourierInboxIconButtonTheme = CourierIconButtonTheme;\n\nexport type CourierInboxFilterItemTheme = {\n icon?: CourierInboxIconTheme;\n text?: string;\n}\n\nexport type CourierInboxUnreadDotIndicatorTheme = {\n backgroundColor?: string;\n borderRadius?: string;\n height?: string;\n width?: string;\n}\n\nexport type CourierInboxUnreadCountIndicatorTheme = {\n font?: CourierInboxFontTheme;\n backgroundColor?: string;\n borderRadius?: string;\n padding?: string;\n}\n\nexport type CourierInboxMenuButtonTheme = CourierInboxIconButtonTheme & {\n unreadDotIndicator?: CourierInboxUnreadDotIndicatorTheme;\n}\n\nexport type CourierInboxPopupTheme = {\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n list?: {\n font?: CourierInboxFontTheme;\n selectionIcon?: CourierInboxIconTheme;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n divider?: string;\n };\n}\n\nexport type CourierInboxListItemTheme = {\n unreadIndicatorColor?: string;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n title?: CourierInboxFontTheme;\n subtitle?: CourierInboxFontTheme;\n time?: CourierInboxFontTheme;\n archiveIcon?: CourierInboxIconTheme;\n divider?: string;\n actions?: {\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n font?: CourierInboxFontTheme;\n }\n menu?: {\n enabled?: boolean;\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n longPress?: {\n displayDuration?: number;\n vibrationDuration?: number;\n };\n item?: {\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n borderRadius?: string;\n read?: CourierInboxIconTheme;\n unread?: CourierInboxIconTheme;\n archive?: CourierInboxIconTheme;\n unarchive?: CourierInboxIconTheme;\n };\n };\n}\n\nexport type CourierInboxSkeletonLoadingStateTheme = {\n animation?: {\n barColor?: string;\n barHeight?: string;\n barBorderRadius?: string;\n duration?: string;\n },\n divider?: string;\n}\n\nexport type CourierInboxInfoStateTheme = {\n title?: {\n font?: CourierInboxFontTheme;\n text?: string;\n },\n button?: CourierInboxButtonTheme;\n}\n\nexport type CourierMenuItemTheme = {\n icon?: CourierInboxIconTheme;\n text?: string;\n}\n\nexport type CourierFilterMenuTheme = {\n button?: CourierInboxIconButtonTheme;\n inbox?: CourierMenuItemTheme;\n archive?: CourierMenuItemTheme;\n}\n\nexport type CourierActionMenuTheme = {\n button?: CourierInboxIconButtonTheme;\n markAllRead?: CourierMenuItemTheme;\n archiveAll?: CourierMenuItemTheme;\n archiveRead?: CourierMenuItemTheme;\n}\n\nexport type CourierInboxTheme = {\n popup?: {\n button?: CourierInboxMenuButtonTheme;\n window?: {\n backgroundColor?: string;\n borderRadius?: string;\n border?: string;\n shadow?: string;\n };\n }\n inbox?: {\n header?: {\n backgroundColor?: string;\n shadow?: string;\n filters?: {\n font?: CourierInboxFontTheme;\n inbox?: CourierInboxFilterItemTheme;\n archive?: CourierInboxFilterItemTheme;\n unreadIndicator?: CourierInboxUnreadCountIndicatorTheme;\n }\n menus?: {\n popup?: CourierInboxPopupTheme;\n filters?: CourierFilterMenuTheme;\n actions?: CourierActionMenuTheme;\n }\n }\n list?: {\n backgroundColor?: string;\n item?: CourierInboxListItemTheme;\n },\n loading?: CourierInboxSkeletonLoadingStateTheme,\n empty?: CourierInboxInfoStateTheme,\n error?: CourierInboxInfoStateTheme\n }\n};\n\nexport const defaultLightTheme: CourierInboxTheme = {\n popup: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n unreadDotIndicator: {\n backgroundColor: CourierColors.blue[500],\n borderRadius: '50%',\n height: '8px',\n width: '8px',\n }\n },\n window: {\n backgroundColor: CourierColors.white[500],\n borderRadius: '8px',\n border: `1px solid ${CourierColors.gray[500]}`,\n shadow: `0px 8px 16px -4px ${CourierColors.gray[500]}`\n }\n },\n inbox: {\n header: {\n backgroundColor: CourierColors.white[500],\n shadow: `0px 1px 0px 0px ${CourierColors.gray[500]}`,\n filters: {\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '18px'\n },\n inbox: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n },\n unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '12px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '4px',\n padding: '2px 6px',\n }\n },\n menus: {\n popup: {\n backgroundColor: CourierColors.white[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: `0px 4px 8px -2px ${CourierColors.gray[500]}`,\n list: {\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n divider: `none`,\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n },\n selectionIcon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.check\n }\n }\n },\n filters: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.filter\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n },\n inbox: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n }\n },\n actions: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.overflow\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n },\n markAllRead: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.read\n },\n text: 'Read All'\n },\n archiveAll: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive All'\n },\n archiveRead: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archiveRead\n },\n text: 'Archive Read'\n }\n },\n }\n },\n list: {\n backgroundColor: CourierColors.white[500],\n item: {\n backgroundColor: 'transparent',\n unreadIndicatorColor: CourierColors.blue[500],\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n actions: {\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: '0px 1px 2px 0px rgba(0, 0, 0, 0.06)',\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n }\n },\n title: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n },\n subtitle: {\n color: CourierColors.gray[600],\n family: undefined,\n size: '14px'\n },\n time: {\n color: CourierColors.gray[600],\n family: undefined,\n size: '14px'\n },\n divider: `1px solid ${CourierColors.gray[200]}`,\n menu: {\n enabled: true,\n backgroundColor: CourierColors.white[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: `0px 2px 4px -2px ${CourierColors.gray[500]}`,\n longPress: {\n displayDuration: 4000,\n vibrationDuration: 50\n },\n item: {\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n borderRadius: '0px',\n read: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.read\n },\n unread: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.unread\n },\n archive: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n unarchive: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.unarchive\n }\n }\n }\n }\n },\n loading: {\n animation: {\n barColor: CourierColors.gray[500],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[200]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.black[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.black[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\nexport const defaultDarkTheme: CourierInboxTheme = {\n popup: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n unreadDotIndicator: {\n backgroundColor: CourierColors.blue[500],\n borderRadius: '50%',\n height: '8px',\n width: '8px',\n }\n },\n window: {\n backgroundColor: CourierColors.black[500],\n borderRadius: '8px',\n border: `1px solid ${CourierColors.gray[400]}`,\n shadow: `0px 4px 8px -2px ${CourierColors.white[500_20]}`\n }\n },\n inbox: {\n header: {\n backgroundColor: CourierColors.black[500],\n shadow: `0px 1px 0px 0px ${CourierColors.gray[400]}`,\n filters: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '18px'\n },\n inbox: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n },\n unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '12px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '4px',\n padding: '3px 8px',\n }\n },\n menus: {\n popup: {\n backgroundColor: CourierColors.black[500],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 4px 8px -2px ${CourierColors.white[500_20]}`,\n list: {\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n divider: `none`,\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n },\n selectionIcon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.check\n }\n }\n },\n filters: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.filter\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n },\n inbox: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n }\n },\n actions: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.overflow\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n },\n markAllRead: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.read\n },\n text: 'Read All'\n },\n archiveAll: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive All'\n },\n archiveRead: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archiveRead\n },\n text: 'Archive Read'\n }\n },\n }\n },\n list: {\n backgroundColor: CourierColors.black[500],\n item: {\n backgroundColor: 'transparent',\n unreadIndicatorColor: CourierColors.blue[500],\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n actions: {\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 1px 2px 0px ${CourierColors.white[500_10]}`,\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n }\n },\n title: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n },\n subtitle: {\n color: CourierColors.gray[500],\n family: undefined,\n size: '14px'\n },\n time: {\n color: CourierColors.gray[500],\n family: undefined,\n size: '12px'\n },\n divider: `1px solid ${CourierColors.gray[400]}`,\n menu: {\n enabled: true,\n backgroundColor: CourierColors.black[500],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 2px 4px -2px ${CourierColors.white[500_20]}`,\n longPress: {\n displayDuration: 4000,\n vibrationDuration: 50\n },\n item: {\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n borderRadius: '0px',\n read: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.read\n },\n unread: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.unread\n },\n archive: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n unarchive: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.unarchive\n }\n }\n }\n }\n },\n loading: {\n animation: {\n barColor: CourierColors.gray[400],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[400]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\n// Deep merge the themes, only overwriting non-optional properties\nexport const mergeTheme = (mode: SystemThemeMode, theme: CourierInboxTheme): CourierInboxTheme => {\n const defaultTheme = mode === 'light' ? defaultLightTheme : defaultDarkTheme;\n return {\n popup: {\n button: {\n ...defaultTheme.popup?.button,\n ...theme.popup?.button,\n icon: {\n ...defaultTheme.popup?.button?.icon,\n ...theme.popup?.button?.icon\n },\n unreadDotIndicator: {\n ...defaultTheme.popup?.button?.unreadDotIndicator,\n ...theme.popup?.button?.unreadDotIndicator\n }\n },\n window: {\n ...defaultTheme.popup?.window,\n ...theme.popup?.window\n }\n },\n inbox: {\n header: {\n ...defaultTheme.inbox?.header,\n ...theme.inbox?.header,\n filters: {\n ...defaultTheme.inbox?.header?.filters,\n ...theme.inbox?.header?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.filters?.inbox,\n ...theme.inbox?.header?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.inbox?.icon,\n ...theme.inbox?.header?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.filters?.archive,\n ...theme.inbox?.header?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.archive?.icon,\n ...theme.inbox?.header?.filters?.archive?.icon\n }\n },\n unreadIndicator: {\n ...defaultTheme.inbox?.header?.filters?.unreadIndicator,\n ...theme.inbox?.header?.filters?.unreadIndicator\n }\n },\n menus: {\n ...defaultTheme.inbox?.header?.menus,\n ...theme.inbox?.header?.menus,\n popup: {\n ...defaultTheme.inbox?.header?.menus?.popup,\n ...theme.inbox?.header?.menus?.popup,\n list: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list,\n ...theme.inbox?.header?.menus?.popup?.list,\n font: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.font,\n ...theme.inbox?.header?.menus?.popup?.list?.font\n },\n selectionIcon: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.selectionIcon,\n ...theme.inbox?.header?.menus?.popup?.list?.selectionIcon\n }\n }\n },\n filters: {\n ...defaultTheme.inbox?.header?.menus?.filters,\n ...theme.inbox?.header?.menus?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox,\n ...theme.inbox?.header?.menus?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox?.icon,\n ...theme.inbox?.header?.menus?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive,\n ...theme.inbox?.header?.menus?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive?.icon,\n ...theme.inbox?.header?.menus?.filters?.archive?.icon\n }\n }\n },\n actions: {\n ...defaultTheme.inbox?.header?.menus?.actions,\n ...theme.inbox?.header?.menus?.actions,\n markAllRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead,\n ...theme.inbox?.header?.menus?.actions?.markAllRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.markAllRead?.icon\n }\n },\n archiveAll: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll,\n ...theme.inbox?.header?.menus?.actions?.archiveAll,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveAll?.icon\n }\n },\n archiveRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead,\n ...theme.inbox?.header?.menus?.actions?.archiveRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveRead?.icon\n }\n }\n }\n }\n },\n list: {\n ...defaultTheme.inbox?.list,\n ...theme.inbox?.list,\n item: {\n ...defaultTheme.inbox?.list?.item,\n ...theme.inbox?.list?.item,\n menu: {\n ...defaultTheme.inbox?.list?.item?.menu,\n ...theme.inbox?.list?.item?.menu,\n item: {\n ...defaultTheme.inbox?.list?.item?.menu?.item,\n ...theme.inbox?.list?.item?.menu?.item,\n read: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.read,\n ...theme.inbox?.list?.item?.menu?.item?.read\n },\n unread: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unread,\n ...theme.inbox?.list?.item?.menu?.item?.unread\n },\n archive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.archive,\n ...theme.inbox?.list?.item?.menu?.item?.archive\n },\n unarchive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unarchive,\n ...theme.inbox?.list?.item?.menu?.item?.unarchive\n }\n }\n }\n }\n },\n loading: {\n ...defaultTheme.inbox?.loading,\n ...theme.inbox?.loading,\n },\n empty: {\n ...defaultTheme.inbox?.empty,\n ...theme.inbox?.empty\n },\n error: {\n ...defaultTheme.inbox?.error,\n ...theme.inbox?.error\n }\n }\n };\n};\n","import { CourierThemeManager, CourierThemeSubscription, SystemThemeMode } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme, defaultDarkTheme, defaultLightTheme, mergeTheme } from \"./courier-inbox-theme\";\n\nexport interface CourierInboxThemeSubscription extends CourierThemeSubscription<CourierInboxTheme> {\n manager: CourierInboxThemeManager;\n}\n\n/**\n * Inbox-specific theme manager that extends the abstract CourierThemeManager.\n * Provides inbox theme management with light/dark mode support.\n */\nexport class CourierInboxThemeManager extends CourierThemeManager<CourierInboxTheme> {\n\n // Event ID for inbox theme changes\n protected readonly THEME_CHANGE_EVENT: string = 'courier_inbox_theme_change';\n\n constructor(initialTheme: CourierInboxTheme) {\n super(initialTheme);\n }\n\n /**\n * Get the default light theme for inbox\n */\n protected getDefaultLightTheme(): CourierInboxTheme {\n return defaultLightTheme;\n }\n\n /**\n * Get the default dark theme for inbox\n */\n protected getDefaultDarkTheme(): CourierInboxTheme {\n return defaultDarkTheme;\n }\n\n /**\n * Merge the inbox theme with defaults\n */\n protected mergeTheme(mode: SystemThemeMode, theme: CourierInboxTheme): CourierInboxTheme {\n return mergeTheme(mode, theme);\n }\n\n /**\n * Subscribe to inbox theme changes\n * @param callback - Function to run when the theme changes\n * @returns Object with unsubscribe method to stop listening\n */\n public subscribe(callback: (theme: CourierInboxTheme) => void): CourierInboxThemeSubscription {\n const baseSubscription = super.subscribe(callback);\n return {\n ...baseSubscription,\n manager: this\n };\n }\n\n}\n","import { AuthenticationListener, Courier, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierInboxList } from \"./courier-inbox-list\";\nimport { CourierInboxHeader } from \"./courier-inbox-header\";\nimport { CourierBaseElement, CourierComponentThemeMode, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { CourierInboxDataStoreListener } from \"../datastore/datastore-listener\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxHeaderFactoryProps, CourierInboxListItemActionFactoryProps, CourierInboxListItemFactoryProps, CourierInboxPaginationItemFactoryProps, CourierInboxStateEmptyFactoryProps, CourierInboxStateErrorFactoryProps, CourierInboxStateLoadingFactoryProps } from \"../types/factories\";\nimport { CourierInboxTheme, defaultLightTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\nimport { CourierUnreadCountBadge } from \"./courier-unread-count-badge\";\n\nexport class CourierInbox extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox';\n }\n\n // State\n private _currentFeed: CourierInboxFeedType = 'inbox';\n\n /** Returns the current feed type. */\n get currentFeed(): CourierInboxFeedType {\n return this._currentFeed;\n }\n\n // Theming\n // Theme manager instance for handling theming logic\n private _themeManager: CourierInboxThemeManager;\n\n /** Returns the current theme object. */\n get theme() {\n return this._themeManager.getTheme();\n }\n\n /**\n * Set the light theme for the inbox.\n * @param theme The light theme object to set.\n */\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n /**\n * Set the dark theme for the inbox.\n * @param theme The dark theme object to set.\n */\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n /**\n * Set the theme mode (light/dark/system).\n * @param mode The theme mode to set.\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._themeManager.setMode(mode);\n }\n\n // Components\n private _inboxStyle?: HTMLStyleElement;\n private _unreadIndicatorStyle?: HTMLStyleElement;\n private _list?: CourierInboxList;\n private _datastoreListener: CourierInboxDataStoreListener | undefined;\n private _authListener: AuthenticationListener | undefined;\n\n // Header\n private _header?: CourierInboxHeader;\n private _headerFactory: ((props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) | undefined | null = undefined;\n\n // List\n private _onMessageClick?: (props: CourierInboxListItemFactoryProps) => void;\n private _onMessageActionClick?: (props: CourierInboxListItemActionFactoryProps) => void;\n private _onMessageLongPress?: (props: CourierInboxListItemFactoryProps) => void;\n\n // Default props\n private _defaultProps = {\n title: 'Inbox',\n icon: CourierIconSVGs.inbox,\n feedType: this._currentFeed,\n height: 'auto'\n };\n\n static get observedAttributes() {\n return ['height', 'light-theme', 'dark-theme', 'mode', 'message-click', 'message-action-click', 'message-long-press'];\n }\n\n constructor(themeManager?: CourierInboxThemeManager) {\n super();\n this._themeManager = themeManager ?? new CourierInboxThemeManager(defaultLightTheme);\n }\n\n onComponentMounted() {\n\n // Inject style\n this._inboxStyle = injectGlobalStyle(CourierInbox.id, this.getStyles());\n this._unreadIndicatorStyle = injectGlobalStyle(CourierUnreadCountBadge.id, CourierUnreadCountBadge.getStyles(this.theme));\n\n // Header\n this._header = new CourierInboxHeader({\n themeManager: this._themeManager,\n onFeedTypeChange: (feedType: CourierInboxFeedType) => {\n this.setFeedType(feedType);\n }\n });\n this._header.build(undefined);\n this.appendChild(this._header);\n\n // Create list and ensure it's properly initialized\n this._list = new CourierInboxList({\n themeManager: this._themeManager,\n canClickListItems: false,\n canLongPressListItems: false,\n onRefresh: () => {\n this.refresh();\n },\n onPaginationTrigger: async (feedType: CourierInboxFeedType) => {\n try {\n await CourierInboxDatastore.shared.fetchNextPageOfMessages({\n feedType: feedType\n });\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to fetch next page of messages:', error);\n }\n },\n onMessageClick: (message, index) => {\n CourierInboxDatastore.shared.clickMessage({ message });\n\n this.dispatchEvent(new CustomEvent('message-click', {\n detail: { message, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageClick?.({ message, index });\n },\n onMessageActionClick: (message, action, index) => {\n\n // TODO: Track action click?\n\n this.dispatchEvent(new CustomEvent('message-action-click', {\n detail: { message, action, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageActionClick?.({ message, action, index });\n },\n onMessageLongPress: (message, index) => {\n this.dispatchEvent(new CustomEvent('message-long-press', {\n detail: { message, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageLongPress?.({ message, index });\n }\n });\n\n this.refreshTheme();\n\n this.appendChild(this._list);\n\n // Attach the datastore listener\n this._datastoreListener = new CourierInboxDataStoreListener({\n onError: (error: Error) => {\n this._list?.setError(error);\n },\n onDataSetChange: (dataSet: InboxDataSet, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.setDataSet(dataSet);\n this.updateHeader();\n }\n },\n onPageAdded: (dataSet: InboxDataSet, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.addPage(dataSet);\n this.updateHeader();\n }\n },\n onMessageAdd: (message: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.addMessage(message, index);\n this.updateHeader();\n }\n },\n onMessageRemove: (_: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.removeMessage(index);\n this.updateHeader();\n }\n },\n onMessageUpdate: (message: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.updateMessage(message, index);\n this.updateHeader();\n }\n },\n onUnreadCountChange: (_: number) => {\n this.updateHeader();\n }\n });\n\n CourierInboxDatastore.shared.addDataStoreListener(this._datastoreListener);\n\n // Refresh the theme on change\n this._themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Listen for authentication state changes\n this._authListener = Courier.shared.addAuthenticationListener((_) => {\n this.refresh();\n });\n\n // Refresh the inbox if the user is already signed in\n if (!Courier.shared.client?.options.userId) {\n Courier.shared.client?.options.logger.error('No user signed in. Please call Courier.shared.signIn(...) to load the inbox.')\n return;\n }\n\n this.refresh();\n\n }\n\n onComponentUnmounted() {\n this._themeManager.cleanup();\n this._datastoreListener?.remove();\n this._authListener?.remove();\n this._inboxStyle?.remove();\n this._unreadIndicatorStyle?.remove();\n }\n\n private refreshTheme() {\n this._list?.refreshInfoStateThemes();\n if (this._inboxStyle) {\n this._inboxStyle.textContent = this.getStyles();\n }\n if (this._unreadIndicatorStyle) {\n this._unreadIndicatorStyle.textContent = CourierUnreadCountBadge.getStyles(this.theme);\n }\n }\n\n private getStyles(): string {\n return `\n ${CourierInbox.id} {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: ${this._defaultProps.height};\n }\n\n ${CourierInbox.id} courier-inbox-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n }\n `;\n }\n\n /**\n * Sets a custom header factory for the inbox.\n * @param factory - A function that returns an HTMLElement to render as the header.\n */\n public setHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._headerFactory = factory;\n this.updateHeader();\n }\n\n /**\n * Removes the custom header factory from the inbox, reverting to the default header.\n */\n public removeHeader() {\n this._headerFactory = null;\n this.updateHeader();\n }\n\n /**\n * Sets a custom loading state factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as the loading state.\n */\n public setLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setLoadingStateFactory(factory);\n }\n\n /**\n * Sets a custom empty state factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as the empty state.\n */\n public setEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setEmptyStateFactory(factory);\n }\n\n /**\n * Sets a custom error state factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as the error state.\n */\n public setErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setErrorStateFactory(factory);\n }\n\n /**\n * Sets a custom list item factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as a list item.\n */\n public setListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setListItemFactory(factory);\n }\n\n /**\n * Sets a custom pagination item factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as a pagination item.\n */\n public setPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setPaginationItemFactory(factory);\n }\n\n /**\n * Registers a handler for message click events.\n * @param handler - A function to be called when a message is clicked.\n */\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageClick = handler;\n\n // Tell the list if we can click. This will update styles if needed.\n this._list?.setCanClickListItems(handler !== undefined);\n }\n\n /**\n * Registers a handler for message action click events.\n * @param handler - A function to be called when a message action is clicked.\n */\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._onMessageActionClick = handler;\n }\n\n /**\n * Registers a handler for message long press events.\n * @param handler - A function to be called when a message is long-pressed.\n */\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageLongPress = handler;\n\n // Tell the list if we can long press. This will update styles if needed.\n this._list?.setCanLongPressListItems(handler !== undefined);\n }\n\n /**\n * Sets the feed type for the inbox (e.g., \"inbox\" or \"archive\").\n * @param feedType - The feed type to display.\n */\n public setFeedType(feedType: CourierInboxFeedType) {\n\n // Do not swap if current feed is same\n if (this._currentFeed === feedType) {\n return;\n }\n\n // Update state\n this._currentFeed = feedType;\n\n // Update components\n this._list?.setFeedType(feedType);\n this.updateHeader();\n\n // Load data\n this.load({\n canUseCache: true\n });\n }\n\n private updateHeader() {\n\n const props = {\n feedType: this._currentFeed,\n unreadCount: CourierInboxDatastore.shared.unreadCount,\n messageCount: this._list?.messages.length ?? 0\n };\n\n switch (this._headerFactory) {\n case undefined:\n this._header?.render(props);\n break;\n case null:\n this._header?.build(null);\n break;\n default:\n const headerElement = this._headerFactory(props);\n this._header?.build(headerElement);\n break;\n }\n\n }\n\n private async load(props: { canUseCache: boolean }) {\n await CourierInboxDatastore.shared.load(props);\n await CourierInboxDatastore.shared.listenForUpdates();\n }\n\n /**\n * Forces a reload of the inbox data, bypassing the cache.\n */\n public refresh() {\n this.load({\n canUseCache: false\n });\n }\n\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'height':\n const height = newValue || this._defaultProps.height;\n this.style.height = height;\n break;\n case 'message-click':\n if (newValue) {\n try {\n this._onMessageClick = new Function('props', newValue) as (props: CourierInboxListItemFactoryProps) => void;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to parse message-click handler:', error);\n }\n } else {\n this._onMessageClick = undefined;\n }\n break;\n case 'message-action-click':\n if (newValue) {\n try {\n this._onMessageActionClick = new Function('props', newValue) as (props: CourierInboxListItemActionFactoryProps) => void;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to parse message-action-click handler:', error);\n }\n } else {\n this._onMessageActionClick = undefined;\n }\n break;\n case 'message-long-press':\n if (newValue) {\n try {\n this._onMessageLongPress = new Function('props', newValue) as (props: CourierInboxListItemFactoryProps) => void;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to parse message-long-press handler:', error);\n }\n } else {\n this._onMessageLongPress = undefined;\n }\n break;\n case 'light-theme':\n if (newValue) {\n this.setLightTheme(JSON.parse(newValue));\n }\n break;\n case 'dark-theme':\n if (newValue) {\n this.setDarkTheme(JSON.parse(newValue));\n }\n break;\n case 'mode':\n this._themeManager.setMode(newValue as CourierComponentThemeMode);\n break;\n }\n }\n\n}\n\nregisterElement(CourierInbox);","import { CourierColors, CourierFactoryElement, CourierIconButton, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\n\nexport class CourierInboxMenuButton extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-menu-button';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // Components\n private _style?: HTMLStyleElement;\n private _container?: HTMLDivElement;\n private _triggerButton?: CourierIconButton;\n private _unreadBadge?: HTMLDivElement;\n\n get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(themeBus: CourierInboxThemeManager) {\n super();\n this._themeSubscription = themeBus.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme();\n });\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxMenuButton.id, CourierInboxMenuButton.getStyles(this.theme));\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n defaultElement(): HTMLElement {\n\n // Create trigger button container\n this._container = document.createElement('div');\n this._container.className = 'menu-button-container';\n\n // Create trigger button\n this._triggerButton = new CourierIconButton(CourierIconSVGs.inbox);\n\n // Create unread badge (red 4x4 circle)\n this._unreadBadge = document.createElement('div');\n this._unreadBadge.className = 'unread-badge';\n this._unreadBadge.style.display = 'none'; // Hidden by default\n\n this._container.appendChild(this._triggerButton);\n this._container.appendChild(this._unreadBadge);\n this.appendChild(this._container);\n\n // Set the theme of the button\n this.refreshTheme();\n\n return this._container;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n return `\n ${CourierInboxMenuButton.id} .menu-button-container {\n position: relative;\n display: inline-block;\n }\n \n ${CourierInboxMenuButton.id} .unread-badge {\n position: absolute;\n top: 2px;\n right: 2px;\n pointer-events: none;\n width: ${theme.popup?.button?.unreadDotIndicator?.height ?? '8px'};\n height: ${theme.popup?.button?.unreadDotIndicator?.width ?? '8px'};\n background: ${theme.popup?.button?.unreadDotIndicator?.backgroundColor ?? 'red'};\n border-radius: ${theme.popup?.button?.unreadDotIndicator?.borderRadius ?? '50%'};\n display: none;\n z-index: 1;\n }\n `;\n }\n\n public onUnreadCountChange(unreadCount: number): void {\n if (this._unreadBadge) {\n this._unreadBadge.style.display = unreadCount > 0 ? 'block' : 'none';\n }\n // Optionally, update theme if needed\n this.refreshTheme();\n }\n\n private refreshTheme() {\n this._triggerButton?.updateIconColor(this.theme?.popup?.button?.icon?.color ?? CourierColors.black[500]);\n this._triggerButton?.updateIconSVG(this.theme?.popup?.button?.icon?.svg ?? CourierIconSVGs.inbox);\n this._triggerButton?.updateBackgroundColor(this.theme?.popup?.button?.backgroundColor ?? 'transparent');\n this._triggerButton?.updateHoverBackgroundColor(this.theme?.popup?.button?.hoverBackgroundColor ?? CourierColors.black[500_10]);\n this._triggerButton?.updateActiveBackgroundColor(this.theme?.popup?.button?.activeBackgroundColor ?? CourierColors.black[500_20]);\n }\n\n}\n\nregisterElement(CourierInboxMenuButton);\n","import { CourierInbox } from \"./courier-inbox\";\nimport { CourierInboxDatastoreEvents } from \"../datastore/datatore-events\";\nimport { CourierInboxDataStoreListener } from \"../datastore/datastore-listener\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxHeaderFactoryProps, CourierInboxListItemActionFactoryProps, CourierInboxListItemFactoryProps, CourierInboxMenuButtonFactoryProps, CourierInboxPaginationItemFactoryProps, CourierInboxStateEmptyFactoryProps, CourierInboxStateErrorFactoryProps, CourierInboxStateLoadingFactoryProps } from \"../types/factories\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxMenuButton } from \"./courier-inbox-menu-button\";\nimport { defaultLightTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\nimport { CourierComponentThemeMode, injectGlobalStyle } from \"@trycourier/courier-ui-core\";\nimport { Courier } from \"@trycourier/courier-js\";\nimport { CourierBaseElement, registerElement } from \"@trycourier/courier-ui-core\";\n\nexport type CourierInboxPopupAlignment = 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center' | 'center-right' | 'center-left' | 'center-center';\n\nexport class CourierInboxPopupMenu extends CourierBaseElement implements CourierInboxDatastoreEvents {\n\n static get id(): string {\n return 'courier-inbox-popup-menu';\n }\n\n // State\n private _width: string = '440px';\n private _height: string = '440px';\n private _popupAlignment: CourierInboxPopupAlignment = 'top-left';\n private _top?: string = undefined;\n private _right?: string = undefined;\n private _bottom?: string = undefined;\n private _left?: string = undefined;\n\n // Theming\n private _themeManager = new CourierInboxThemeManager(defaultLightTheme);\n\n /** Returns the current theme object. */\n get theme() {\n return this._themeManager.getTheme();\n }\n\n /** Returns the current feed type. */\n get currentFeed(): CourierInboxFeedType {\n return this._inbox?.currentFeed ?? 'inbox';\n }\n\n /**\n * Set the light theme for the popup menu.\n * @param theme The light theme object to set.\n */\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n /**\n * Set the dark theme for the popup menu.\n * @param theme The dark theme object to set.\n */\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n /**\n * Set the theme mode (light/dark/system).\n * @param mode The theme mode to set.\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._themeManager.setMode(mode);\n }\n\n // Components\n private _triggerButton?: CourierInboxMenuButton;\n private _popup?: HTMLDivElement;\n private _inbox?: CourierInbox;\n private _style?: HTMLStyleElement;\n\n // Listeners\n private _datastoreListener?: CourierInboxDataStoreListener;\n\n // Factories\n private _popupMenuButtonFactory?: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement;\n\n static get observedAttributes() {\n return ['popup-alignment', 'message-click', 'message-action-click', 'message-long-press', 'popup-width', 'popup-height', 'top', 'right', 'bottom', 'left', 'light-theme', 'dark-theme', 'mode'];\n }\n\n constructor() {\n super();\n\n // Refresh the theme on change\n this._themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n }\n\n onComponentMounted() {\n\n // Inject the styles to the head\n this._style = injectGlobalStyle(CourierInboxPopupMenu.id, CourierInboxPopupMenu.getStyles(this.theme, this._width, this._height));\n\n // Create trigger button\n this._triggerButton = new CourierInboxMenuButton(this._themeManager);\n this._triggerButton.build(undefined);\n\n // Create popup container\n this._popup = document.createElement('div');\n this._popup.className = 'popup';\n\n // Create content container\n this._inbox = new CourierInbox(this._themeManager);\n this._inbox.setAttribute('height', '100%');\n\n this.refreshTheme();\n\n this.appendChild(this._triggerButton);\n this.appendChild(this._popup);\n this._popup.appendChild(this._inbox);\n\n // Add event listeners\n this._triggerButton.addEventListener('click', this.togglePopup.bind(this));\n document.addEventListener('click', this.handleOutsideClick.bind(this));\n\n // Initialize popup position\n this.updatePopupPosition();\n\n // Attach the datastore listener\n this._datastoreListener = new CourierInboxDataStoreListener(this);\n CourierInboxDatastore.shared.addDataStoreListener(this._datastoreListener);\n\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n this._datastoreListener?.remove();\n this._themeManager.cleanup();\n }\n\n private refreshTheme() {\n if (this._style) {\n this._style.textContent = CourierInboxPopupMenu.getStyles(this.theme, this._width, this._height);\n }\n }\n\n static getStyles(theme: CourierInboxTheme, width: string, height: string): string {\n return `\n ${CourierInboxPopupMenu.id} {\n display: inline-block;\n position: relative;\n }\n\n ${CourierInboxPopupMenu.id} .menu-button-container {\n position: relative;\n display: inline-block;\n }\n\n ${CourierInboxPopupMenu.id} .popup {\n display: none;\n position: absolute;\n background: ${theme.popup?.window?.backgroundColor ?? 'red'};\n border-radius: ${theme.popup?.window?.borderRadius ?? '8px'};\n border: ${theme.popup?.window?.border ?? `1px solid red`};\n box-shadow: ${theme.popup?.window?.shadow ?? `0px 8px 16px -4px red`};\n z-index: 1000;\n width: ${width};\n height: ${height};\n overflow: hidden;\n transform: translateZ(0);\n will-change: transform;\n }\n \n ${CourierInboxPopupMenu.id} #unread-badge {\n position: absolute;\n top: -8px;\n left: 50%;\n pointer-events: none;\n }\n\n ${CourierInboxPopupMenu.id} courier-inbox {\n height: 100%;\n }\n `;\n }\n\n attributeChangedCallback(name: string, _: string, newValue: string) {\n switch (name) {\n case 'popup-alignment':\n if (this.isValidPosition(newValue)) {\n this._popupAlignment = newValue as CourierInboxPopupAlignment;\n this.updatePopupPosition();\n }\n break;\n case 'popup-width':\n this._width = newValue;\n this.setSize(newValue, this._height);\n break;\n case 'popup-height':\n this._height = newValue;\n this.setSize(this._width, newValue);\n break;\n case 'top':\n this._top = newValue;\n this.updatePopupPosition();\n break;\n case 'right':\n this._right = newValue;\n this.updatePopupPosition();\n break;\n case 'bottom':\n this._bottom = newValue;\n this.updatePopupPosition();\n break;\n case 'left':\n this._left = newValue;\n this.updatePopupPosition();\n break;\n case 'light-theme':\n if (newValue) {\n this.setLightTheme(JSON.parse(newValue));\n }\n break;\n case 'dark-theme':\n if (newValue) {\n this.setDarkTheme(JSON.parse(newValue));\n }\n break;\n case 'mode':\n this._themeManager.setMode(newValue as CourierComponentThemeMode);\n break;\n }\n }\n\n /**\n * Called when the unread count changes.\n * @param _ The new unread count (unused).\n */\n public onUnreadCountChange(_: number): void {\n this.render();\n }\n\n /**\n * Set a handler for message click events.\n * @param handler The function to call when a message is clicked.\n */\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageClick((props) => {\n if (handler) {\n handler(props);\n }\n this.closePopup();\n });\n }\n\n /**\n * Set a handler for message action click events.\n * @param handler The function to call when a message action is clicked.\n */\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._inbox?.onMessageActionClick((props) => {\n if (handler) {\n handler(props);\n }\n this.closePopup();\n });\n }\n\n /**\n * Set a handler for message long press events.\n * @param handler The function to call when a message is long pressed.\n */\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageLongPress((props) => {\n if (handler) {\n handler(props);\n }\n this.closePopup();\n });\n }\n\n private isValidPosition(value: string): value is CourierInboxPopupAlignment {\n const validPositions: CourierInboxPopupAlignment[] = [\n 'top-right', 'top-left', 'top-center',\n 'bottom-right', 'bottom-left', 'bottom-center',\n 'center-right', 'center-left', 'center-center'\n ];\n return validPositions.includes(value as CourierInboxPopupAlignment);\n }\n\n private updatePopupPosition() {\n if (!this._popup) return;\n\n // Reset all positions\n this._popup.style.top = '';\n this._popup.style.bottom = '';\n this._popup.style.left = '';\n this._popup.style.right = '';\n this._popup.style.margin = '';\n this._popup.style.transform = '';\n\n switch (this._popupAlignment) {\n case 'top-right':\n this._popup.style.top = this._top ?? '40px';\n this._popup.style.right = this._right ?? '0px';\n break;\n case 'top-left':\n this._popup.style.top = this._top ?? '40px';\n this._popup.style.left = this._left ?? '0px';\n break;\n case 'top-center':\n this._popup.style.top = this._top ?? '40px';\n this._popup.style.left = '50%';\n this._popup.style.transform = 'translateX(-50%)';\n break;\n case 'bottom-right':\n this._popup.style.bottom = this._bottom ?? '40px';\n this._popup.style.right = this._right ?? '0px';\n break;\n case 'bottom-left':\n this._popup.style.bottom = this._bottom ?? '40px';\n this._popup.style.left = this._left ?? '0px';\n break;\n case 'bottom-center':\n this._popup.style.bottom = this._bottom ?? '40px';\n this._popup.style.left = '50%';\n this._popup.style.transform = 'translateX(-50%)';\n break;\n case 'center-right':\n this._popup.style.top = '50%';\n this._popup.style.right = this._right ?? '40px';\n this._popup.style.transform = 'translateY(-50%)';\n break;\n case 'center-left':\n this._popup.style.top = '50%';\n this._popup.style.left = this._left ?? '40px';\n this._popup.style.transform = 'translateY(-50%)';\n break;\n case 'center-center':\n this._popup.style.top = '50%';\n this._popup.style.left = '50%';\n this._popup.style.transform = 'translate(-50%, -50%)';\n break;\n }\n }\n\n /**\n * Toggle the popup menu open/closed.\n * @param event The click event that triggered the toggle.\n */\n private togglePopup(event: Event) {\n event.stopPropagation();\n if (!this._popup) return;\n\n const isVisible = this._popup.style.display === 'block';\n this._popup.style.display = isVisible ? 'none' : 'block';\n }\n\n /**\n * Close the popup menu.\n */\n public closePopup() {\n if (!this._popup) return;\n this._popup.style.display = 'none';\n }\n\n private handleOutsideClick = (event: MouseEvent) => {\n if (!this._popup) return;\n\n // Nodes the click may legally occur inside without closing the popup\n const SAFE_SELECTORS = [\n 'courier-inbox-option-menu',\n ];\n\n // composedPath() gives us every node (even inside shadow DOMs)\n const clickIsInsideAllowedArea = event\n .composedPath()\n .some(node => {\n if (!(node instanceof HTMLElement)) return false;\n if (node === this._popup || this._popup!.contains(node)) return true;\n return SAFE_SELECTORS.some(sel => node.matches(sel));\n });\n\n if (clickIsInsideAllowedArea) return;\n\n // Otherwise, it really was an outside click – hide the popup\n this._popup.style.display = 'none';\n };\n\n /**\n * Set the content of the popup inbox.\n * @param element The HTMLElement to set as the content.\n */\n public setContent(element: HTMLElement) {\n if (!this._inbox) return;\n this._inbox.innerHTML = '';\n this._inbox.appendChild(element);\n }\n\n /**\n * Set the size of the popup menu.\n * @param width The width to set.\n * @param height The height to set.\n */\n public setSize(width: string, height: string) {\n this._width = width;\n this._height = height;\n if (!this._popup) return;\n this._popup.style.width = width;\n this._popup.style.height = height;\n }\n\n /**\n * Set the popup alignment/position.\n * @param position The alignment/position to set.\n */\n public setPosition(position: CourierInboxPopupAlignment) {\n if (this.isValidPosition(position)) {\n this._popupAlignment = position;\n this.updatePopupPosition();\n } else {\n Courier.shared.client?.options.logger?.error(`Invalid position: ${position}`);\n }\n }\n\n /**\n * Set the feed type for the inbox.\n * @param feedType The feed type to set.\n */\n public setFeedType(feedType: CourierInboxFeedType) {\n this._inbox?.setFeedType(feedType);\n }\n\n // Factory methods\n /**\n * Set a custom header factory for the inbox.\n * @param factory The factory function for the header.\n */\n public setHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setHeader(factory);\n }\n\n /**\n * Remove the custom header from the inbox.\n */\n public removeHeader() {\n this._inbox?.removeHeader();\n }\n\n /**\n * Set a custom loading state factory for the inbox.\n * @param factory The factory function for the loading state.\n */\n public setLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setLoadingState(factory);\n }\n\n /**\n * Set a custom empty state factory for the inbox.\n * @param factory The factory function for the empty state.\n */\n public setEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setEmptyState(factory);\n }\n\n /**\n * Set a custom error state factory for the inbox.\n * @param factory The factory function for the error state.\n */\n public setErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setErrorState(factory);\n }\n\n /**\n * Set a custom list item factory for the inbox.\n * @param factory The factory function for the list item.\n */\n public setListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setListItem(factory);\n }\n\n /**\n * Set a custom pagination item factory for the inbox.\n * @param factory The factory function for the pagination item.\n */\n public setPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setPaginationItem(factory);\n }\n\n /**\n * Set a custom menu button factory for the popup trigger.\n * @param factory The factory function for the menu button.\n */\n public setMenuButton(factory: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement) {\n this._popupMenuButtonFactory = factory;\n this.render();\n }\n\n private render() {\n const unreadCount = CourierInboxDatastore.shared.unreadCount;\n if (!this._triggerButton) return;\n\n switch (this._popupMenuButtonFactory) {\n case undefined:\n case null:\n this._triggerButton.build(undefined);\n this._triggerButton.onUnreadCountChange(unreadCount);\n break;\n default:\n const customButton = this._popupMenuButtonFactory({ unreadCount });\n this._triggerButton.build(customButton);\n break;\n }\n }\n\n}\n\nregisterElement(CourierInboxPopupMenu);\n","export * from './components/courier-inbox';\nexport * from './components/courier-inbox-header';\nexport * from './components/courier-inbox-list-item';\nexport * from './components/courier-inbox-popup-menu';\nexport * from './utils/extensions';\nexport * from './types/factories';\nexport * from './types/feed-type';\nexport * from './types/courier-inbox-theme';\nexport * from './types/courier-inbox-theme-manager';\nexport * from './types/inbox-data-set';\nexport * from './datastore/datastore';\nexport * from './datastore/datastore-listener';\nexport * from './datastore/datatore-events';\n\nimport { Courier } from \"@trycourier/courier-js\";\n\nCourier.shared.courierUserAgentName = \"courier-ui-inbox\";\nCourier.shared.courierUserAgentVersion = __PACKAGE_VERSION__;\n\n// Re-export Courier from courier-js for direct import\nexport { Courier };\n\n// Re-export types from courier-js\nexport type {\n CourierProps,\n CourierClientOptions,\n CourierBrand,\n CourierApiUrls,\n CourierUserPreferences,\n CourierUserPreferencesStatus,\n CourierUserPreferencesChannel,\n CourierUserPreferencesPaging,\n CourierUserPreferencesTopic,\n CourierUserPreferencesTopicResponse,\n CourierDevice,\n CourierToken,\n CourierGetInboxMessageResponse,\n CourierGetInboxMessagesResponse,\n InboxMessage,\n InboxAction,\n InboxMessageEventEnvelope,\n} from '@trycourier/courier-js';\n\n// Re-export types from courier-ui-core\nexport type {\n CourierComponentThemeMode\n} from '@trycourier/courier-ui-core'\n","import { CourierInboxFeedType } from \"../types/feed-type\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { InboxMessage } from \"@trycourier/courier-js\";\n\nexport class CourierInboxDatastoreEvents {\n public onDataSetChange?(_: InboxDataSet, __: CourierInboxFeedType): void { }\n public onPageAdded?(_: InboxDataSet, __: CourierInboxFeedType): void { }\n public onUnreadCountChange?(_: number): void { }\n public onMessageAdd?(_: InboxMessage, __: number, ___: CourierInboxFeedType): void { }\n public onMessageRemove?(_: InboxMessage, __: number, ___: CourierInboxFeedType): void { }\n public onMessageUpdate?(_: InboxMessage, __: number, ___: CourierInboxFeedType): void { }\n public onError?(_: Error): void { }\n}\n"],"names":["copyMessage","message","copy","actions","map","action","data","JSON","parse","stringify","copyInboxAction","tags","trackingIds","copyInboxDataSet","dataSet","messages","CourierInboxListItemMenu","CourierBaseElement","constructor","theme","super","__publicField","this","_theme","id","onComponentMounted","menu","document","createElement","className","appendChild","getStyles","_c","_b","_a","inbox","list","item","backgroundColor","border","borderRadius","shadow","setOptions","options","_options","renderMenu","querySelector","innerHTML","menuTheme","cancelEvent","e","stopPropagation","preventDefault","forEach","opt","icon","CourierIconButton","svg","color","hoverBackgroundColor","activeBackgroundColor","handleInteraction","onClick","addEventListener","show","style","display","classList","add","hide","remove","registerElement","_CourierInboxDatastore","shared","instance","unreadCount","_unreadCount","inboxDataSet","_inboxDataSet","feedType","canPaginate","paginationCursor","archiveDataSet","_archiveDataSet","addDataStoreListener","listener","_dataStoreListeners","push","removeDataStoreListener","filter","l","fetchCachableDataSet","props","canUseCache","response","fetch","nodes","_e","_d","pageInfo","hasNextPage","_h","_f","_g","startCursor","fetchUnreadCount","Courier","client","getUnreadMessageCount","load","userId","Error","properties","Promise","all","getMessages","getArchivedMessages","events","onDataSetChange","call","onUnreadCountChange","error","logger","onError","listenForUpdates","connectSocket","socket","info","addMessageEventListener","event","InboxMessageEvent","NewMessage","addMessage","getMessage","messageId","MarkAllRead","readAllMessages","canCallApi","Read","readMessage","Unread","unreadMessage","Opened","openMessage","Archive","archiveMessage","ArchiveRead","archiveReadMessages","ArchiveAll","archiveAllMessages","Clicked","clickMessage","Unarchive","unarchiveMessage","Unopened","isConnecting","isOpen","connectionId","connect","find","m","fetchNextPageOfMessages","isPaginatingInbox","paginationLimit","_j","_i","addPage","isPaginatingArchive","_m","_p","_o","_s","_q","_r","_v","_t","_u","canMutate","datastoreSnapshot","getDatastoreSnapshot","snapshot","getMessageSnapshot","read","Date","toISOString","applyMessageSnapshot","applyDatastoreSnapshot","unread","inboxIndex","archiveIndex","opened","open","clickTrackingId","click","trackingId","messageSnapshot","archived","removeMessage","insertIndex","findInsertIndex","archive","unarchive","timestamp","findIndex","splice","archiveRead","archiveAll","readAll","newMessage","i","length","created","onPageAdded","index","onMessageAdd","onMessageRemove","updateMessage","onMessageUpdate","CourierInboxDatastore","CourierInboxListItem","themeManager","canClick","_canLongPress","_canClick","_themeManager","getTheme","_isMobile","window","render","_setupIntersectionObserver","contentContainer","_titleElement","_subtitleElement","_actionsContainer","_timeElement","_unreadIndicator","_menu","_getMenuOptions","append","cancelPropagation","contains","target","composedPath","includes","_message","onItemClick","CourierIcon","_isLongPress","_setupHoverBehavior","_setupLongPressBehavior","IntersectionObserver","_observer","disconnect","entries","entry","intersectionRatio","onItemVisible","threshold","observe","onComponentUnmounted","divider","unreadIndicatorColor","title","family","_l","_k","size","_n","subtitle","time","_x","_w","_z","_y","_showMenu","_hideMenu","enabled","longPress","_longPressTimeout","setTimeout","onItemLongPress","navigator","vibrate","vibrationDuration","displayDuration","passive","clearTimeout","isArchiveFeed","_feedType","opacity","setMessage","_updateContent","setOnItemClick","cb","setOnItemActionClick","onItemActionClick","setOnItemLongPress","setOnItemVisible","textContent","toggle","preview","body","now","messageDate","diffInSeconds","Math","floor","getTime","getMessageTime","hasActions","actionsTheme","actionButton","CourierButton","mode","text","content","variant","fontFamily","font","fontSize","fontWeight","weight","textColor","CourierInboxSkeletonListItem","_style","injectGlobalStyle","firstRow","CourierSkeletonAnimatedRow","secondRow","thirdRow","skeletonItem","loading","animation","barColor","hexColor","r","parseInt","slice","g","b","colorWithAlpha80","colorWithAlpha40","barHeight","duration","barBorderRadius","CourierInboxSkeletonList","CourierFactoryElement","defaultElement","CourierInboxPaginationListItem","_customItem","customItem","_onPaginationTrigger","onPaginationTrigger","container","_skeletonLoadingList","build","isIntersecting","CourierInboxList","_onRefresh","onRefresh","_onMessageClick","onMessageClick","_onMessageActionClick","onMessageActionClick","_onMessageLongPress","onMessageLongPress","_themeSubscription","subscribe","_","_messages","manager","_listStyles","_listItemStyles","_listItemMenuStyles","unsubscribe","setCanClickListItems","_canClickListItems","setCanLongPressListItems","canLongPress","_canLongPressListItems","setDataSet","_canPaginate","Boolean","_error","_isLoading","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","refreshInfoStateThemes","_emptyContainer","updateStyles","errorProps","emptyProps","themeMode","button","empty","firstChild","removeChild","_errorContainer","CourierInfoState","_errorStateFactory","loadingElement","_loadingStateFactory","_emptyStateFactory","_listItemFactory","listItem","openVisibleMessage","paginationItem","_paginationItemFactory","setLoadingStateFactory","factory","setEmptyStateFactory","setErrorStateFactory","setListItemFactory","setPaginationItemFactory","CourierInboxOptionMenuItem","_option","option","_isSelected","isSelected","_isSelectedable","selectable","_content","_itemIcon","CourierIconSVGs","setAttribute","_title","spacer","_selectionIcon","check","refreshTheme","updateColor","selectionIcon","updateSVG","CourierInboxOptionMenu","type","onMenuOpen","_type","_selectable","_selectedIndex","_onMenuOpen","_menuButton","overflow","toggleMenu","bind","handleOutsideClick","header","menus","popup","_E","_D","_C","_B","_A","_K","_J","_I","_H","_G","_F","_Q","_P","_O","_N","_M","_L","_W","_V","_U","_T","_S","_R","_aa","_$","__","_Z","_Y","_X","isFilter","buttonConfig","filters","defaultIcon","updateIconSVG","updateIconColor","updateBackgroundColor","updateHoverBackgroundColor","updateActiveBackgroundColor","refreshMenuItems","menuItem","closeMenu","isOpening","selectOption","o","CourierUnreadCountBadge","_location","location","themeBus","_badge","updateBadge","unreadIndicator","padding","setCount","count","_count","toString","CourierInboxHeaderTitle","_iconElement","_unreadBadge","updateFilter","updateSelectedOption","CourierInboxHeader","_onFeedTypeChange","onFeedTypeChange","observedAttributes","onComponentUmounted","getFilterOptions","filterMenu","handleOptionMenuItemClick","getActionOptions","actionMenu","markAllRead","_filterMenu","_actionMenu","_titleSection","newElement","filterOptions","headerContent","CourierColors","white","CourierInboxDataStoreListener","defaultLightTheme","black","unreadDotIndicator","blue","height","width","gray","defaultDarkTheme","mergeTheme","defaultTheme","_ba","_ea","_da","_ca","_ha","_ga","_fa","_la","_ia","_ja","_ka","_pa","_ma","_na","_oa","_ua","_ta","_sa","_ra","_qa","_za","_ya","_xa","_wa","_va","_Ea","_Da","_Ca","_Ba","_Aa","_Ja","_Ia","_Ha","_Ga","_Fa","_Ma","_La","_Ka","_Pa","_Oa","_Na","_Ta","_Qa","_Ra","_Sa","_Xa","_Ua","_Va","_Wa","_ab","_$a","__a","_Za","_Ya","_fb","_eb","_db","_cb","_bb","_jb","_gb","_hb","_ib","_nb","_kb","_lb","_mb","_sb","_rb","_qb","_pb","_ob","_xb","_wb","_vb","_ub","_tb","_Ab","_zb","_yb","_Db","_Cb","_Bb","_Hb","_Eb","_Fb","_Gb","_Lb","_Ib","_Jb","_Kb","_Qb","_Pb","_Ob","_Nb","_Mb","_Vb","_Ub","_Tb","_Sb","_Rb","_Zb","_Wb","_Xb","_Yb","_bc","__b","_$b","_ac","_gc","_fc","_ec","_dc","_cc","_lc","_kc","_jc","_ic","_hc","_pc","_mc","_nc","_oc","_tc","_qc","_rc","_sc","_yc","_xc","_wc","_vc","_uc","_Dc","_Cc","_Bc","_Ac","_zc","_Ec","_Fc","_Hc","_Gc","_Jc","_Ic","_Mc","_Lc","_Kc","_Pc","_Oc","_Nc","_Tc","_Qc","_Rc","_Sc","_Xc","_Uc","_Vc","_Wc","_ad","_$c","__c","_Zc","_Yc","_fd","_ed","_dd","_cd","_bd","_kd","_jd","_id","_hd","_gd","_pd","_od","_nd","_md","_ld","_ud","_td","_sd","_rd","_qd","_zd","_yd","_xd","_wd","_vd","_Ed","_Dd","_Cd","_Bd","_Ad","_Jd","_Id","_Hd","_Gd","_Fd","_Kd","_Ld","_Md","_Nd","_Od","_Pd","CourierInboxThemeManager","CourierThemeManager","initialTheme","getDefaultLightTheme","getDefaultDarkTheme","callback","CourierInbox","_currentFeed","currentFeed","setLightTheme","setDarkTheme","setMode","_inboxStyle","_unreadIndicatorStyle","_header","_list","canClickListItems","canLongPressListItems","refresh","async","dispatchEvent","CustomEvent","detail","bubbles","composed","_datastoreListener","updateHeader","_authListener","addAuthenticationListener","cleanup","_defaultProps","setHeader","_headerFactory","removeHeader","setLoadingState","setEmptyState","setErrorState","setListItem","setPaginationItem","handler","messageCount","headerElement","attributeChangedCallback","name","oldValue","newValue","Function","CourierInboxMenuButton","_container","_triggerButton","CourierInboxPopupMenu","_popup","SAFE_SELECTORS","some","node","HTMLElement","sel","matches","_inbox","_width","_height","togglePopup","updatePopupPosition","isValidPosition","_popupAlignment","setSize","_top","_right","_bottom","_left","closePopup","value","top","bottom","left","right","margin","transform","isVisible","setContent","element","setPosition","position","setMenuButton","_popupMenuButtonFactory","customButton","courierUserAgentName","courierUserAgentVersion","___"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/utils.ts","../src/components/courier-inbox-list-item-menu.ts","../src/datastore/datastore.ts","../src/components/courier-inbox-list-item.ts","../src/components/courier-inbox-skeleton-list-item.ts","../src/components/courier-inbox-skeleton-list.ts","../src/components/courier-inbox-pagination-list-item.ts","../src/utils/extensions.ts","../src/components/courier-inbox-list.ts","../src/components/courier-inbox-option-menu-item.ts","../src/components/courier-inbox-option-menu.ts","../src/components/courier-unread-count-badge.ts","../src/components/courier-inbox-header-title.ts","../src/components/courier-inbox-header.ts","../src/datastore/datastore-listener.ts","../src/types/courier-inbox-theme.ts","../src/types/courier-inbox-theme-manager.ts","../src/components/courier-inbox.ts","../src/components/courier-inbox-menu-button.ts","../src/components/courier-inbox-popup-menu.ts","../src/index.ts","../src/datastore/datatore-events.ts"],"sourcesContent":["import { InboxMessage, InboxAction } from \"@trycourier/courier-js\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\n\n/**\n * Copy a message\n * @param message - The message to copy\n * @returns A copy of the message\n */\nexport function copyMessage(message: InboxMessage): InboxMessage {\n const copy = {\n ...message,\n };\n\n if (message.actions) {\n copy.actions = message.actions.map(action => copyInboxAction(action));\n }\n\n if (message.data) {\n copy.data = JSON.parse(JSON.stringify(message.data));\n }\n\n if (message.tags) {\n copy.tags = [...message.tags];\n }\n\n if (message.trackingIds) {\n copy.trackingIds = { ...message.trackingIds };\n }\n\n return copy;\n}\n\n/**\n * Copy an inbox action\n * @param action - The inbox action to copy\n * @returns A copy of the inbox action\n */\nexport function copyInboxAction(action: InboxAction): InboxAction {\n const copy = {\n ...action,\n };\n\n if (action.data) {\n copy.data = JSON.parse(JSON.stringify(action.data));\n }\n\n return copy;\n}\n\n/**\n * Copy an inbox data set\n * @param dataSet - The inbox data set to copy\n * @returns A copy of the inbox data set\n */\nexport function copyInboxDataSet(dataSet?: InboxDataSet): InboxDataSet | undefined {\n\n if (!dataSet) {\n return undefined;\n }\n\n return {\n ...dataSet,\n messages: dataSet.messages.map(message => copyMessage(message)),\n };\n\n}\n\nexport function getMessageTime(message: InboxMessage): string {\n if (!message.created) return 'Now';\n\n const now = new Date();\n const messageDate = new Date(message.created);\n const diffInSeconds = Math.floor((now.getTime() - messageDate.getTime()) / 1000);\n\n if (diffInSeconds < 5) return 'Now';\n if (diffInSeconds < 60) return `${diffInSeconds}s`;\n if (diffInSeconds < 3600) return `${Math.floor(diffInSeconds / 60)}m`;\n if (diffInSeconds < 86400) return `${Math.floor(diffInSeconds / 3600)}h`;\n if (diffInSeconds < 604800) return `${Math.floor(diffInSeconds / 86400)}d`;\n if (diffInSeconds < 31536000) return `${Math.floor(diffInSeconds / 604800)}w`;\n return `${Math.floor(diffInSeconds / 31536000)}y`;\n}","import { CourierBaseElement, CourierIconButton, registerElement } from '@trycourier/courier-ui-core';\nimport { CourierInboxIconTheme, CourierInboxTheme } from '../types/courier-inbox-theme';\n\nexport type CourierInboxListItemActionMenuOption = {\n id: string;\n icon: CourierInboxIconTheme;\n onClick: () => void;\n};\n\nexport class CourierInboxListItemMenu extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item-menu';\n }\n\n // State\n private _theme: CourierInboxTheme;\n private _options: CourierInboxListItemActionMenuOption[] = [];\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n const menu = document.createElement('ul');\n menu.className = 'menu';\n this.appendChild(menu);\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const menu = theme.inbox?.list?.item?.menu;\n\n return `\n ${CourierInboxListItemMenu.id} {\n display: none;\n position: absolute;\n background: ${menu?.backgroundColor ?? 'red'};\n border: ${menu?.border ?? '1px solid red'};\n border-radius: ${menu?.borderRadius ?? '0px'};\n box-shadow: ${menu?.shadow ?? '0 2px 8px red'};\n user-select: none;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.15s;\n overflow: hidden;\n }\n\n ${CourierInboxListItemMenu.id}.visible {\n display: block;\n opacity: 1;\n pointer-events: auto;\n }\n\n ${CourierInboxListItemMenu.id} ul.menu {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n }\n\n ${CourierInboxListItemMenu.id} li.menu-item {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-bottom: none;\n background: transparent;\n }\n `;\n }\n\n setOptions(options: CourierInboxListItemActionMenuOption[]) {\n this._options = options;\n this.renderMenu();\n }\n\n private renderMenu() {\n // Clear existing menu items\n const menu = this.querySelector('ul.menu');\n if (!menu) return;\n menu.innerHTML = '';\n const menuTheme = this._theme.inbox?.list?.item?.menu;\n\n // Prevent click events from propagating outside of this menu\n const cancelEvent = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n // Create new menu items\n this._options.forEach((opt) => {\n const icon = new CourierIconButton(opt.icon.svg, opt.icon.color, menuTheme?.backgroundColor, menuTheme?.item?.hoverBackgroundColor, menuTheme?.item?.activeBackgroundColor, menuTheme?.item?.borderRadius);\n\n // Handle both click and touch events\n const handleInteraction = (e: Event) => {\n cancelEvent(e);\n opt.onClick();\n };\n\n // Add click handler for desktop\n icon.addEventListener('click', handleInteraction);\n\n // Add touch handlers for mobile\n icon.addEventListener('touchstart', cancelEvent);\n icon.addEventListener('touchend', handleInteraction);\n\n // Prevent default touch behavior\n icon.addEventListener('touchmove', cancelEvent);\n\n // Prevent mouse events from interfering\n icon.addEventListener('mousedown', cancelEvent);\n icon.addEventListener('mouseup', cancelEvent);\n\n menu.appendChild(icon);\n });\n }\n\n show() {\n this.style.display = 'block';\n this.classList.add('visible');\n }\n\n hide() {\n this.style.display = 'none';\n this.classList.remove('visible');\n }\n}\n\nregisterElement(CourierInboxListItemMenu);","import { Courier, CourierGetInboxMessagesResponse, InboxMessage, InboxMessageEvent, InboxMessageEventEnvelope } from \"@trycourier/courier-js\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { CourierInboxDataStoreListener } from \"./datastore-listener\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { DataSetSnapshot, MessageSnapshot } from \"../types/snapshots\";\nimport { copyInboxDataSet, copyMessage } from \"../utils/utils\";\n\nexport class CourierInboxDatastore {\n private static instance: CourierInboxDatastore;\n private _inboxDataSet?: InboxDataSet;\n private _archiveDataSet?: InboxDataSet;\n private _dataStoreListeners: CourierInboxDataStoreListener[] = [];\n private _unreadCount?: number;\n private _removeMessageEventListener?: () => void;\n private isPaginatingInbox: boolean = false;\n private isPaginatingArchive: boolean = false;\n\n public static get shared(): CourierInboxDatastore {\n if (!CourierInboxDatastore.instance) {\n CourierInboxDatastore.instance = new CourierInboxDatastore();\n }\n return CourierInboxDatastore.instance;\n }\n\n public get unreadCount(): number {\n return this._unreadCount ?? 0;\n }\n\n public get inboxDataSet(): InboxDataSet {\n return this._inboxDataSet ?? { feedType: 'inbox', messages: [], canPaginate: false, paginationCursor: null };\n }\n\n public get archiveDataSet(): InboxDataSet {\n return this._archiveDataSet ?? { feedType: 'archive', messages: [], canPaginate: false, paginationCursor: null };\n }\n\n public addDataStoreListener(listener: CourierInboxDataStoreListener) {\n this._dataStoreListeners.push(listener);\n }\n\n public removeDataStoreListener(listener: CourierInboxDataStoreListener) {\n this._dataStoreListeners = this._dataStoreListeners.filter(l => l !== listener);\n }\n\n private async fetchCachableDataSet(props: { fetch: Promise<CourierGetInboxMessagesResponse>, feedType: CourierInboxFeedType, canUseCache: boolean }): Promise<InboxDataSet> {\n\n // If we can return the cached version, return it.\n // If there is no cache, it will fall through and fetch the latest from the server.\n if (props.canUseCache) {\n if (props.feedType === 'inbox' && this._inboxDataSet) {\n return this._inboxDataSet;\n }\n if (props.feedType === 'archive' && this._archiveDataSet) {\n return this._archiveDataSet;\n }\n }\n\n // Perform the fetch\n const response = await props.fetch;\n\n // Bundle the data properly\n return {\n feedType: props.feedType,\n messages: response.data?.messages?.nodes ?? [],\n canPaginate: response.data?.messages?.pageInfo?.hasNextPage ?? false,\n paginationCursor: response.data?.messages?.pageInfo?.startCursor ?? null,\n };\n\n }\n\n private async fetchUnreadCount(props: { canUseCache: boolean }): Promise<number> {\n\n if (props.canUseCache && this._unreadCount !== undefined) {\n return this._unreadCount;\n }\n\n const unreadCount = await Courier.shared.client?.inbox.getUnreadMessageCount();\n return unreadCount ?? 0;\n }\n\n public async load(props?: { canUseCache: boolean }) {\n\n try {\n\n const client = Courier.shared.client;\n\n // If the user is not signed in, return early\n if (!client?.options.userId) {\n throw new Error('User is not signed in');\n }\n\n // If no props are provided, use the default values\n const properties = props ?? { canUseCache: true };\n\n // Fetch the data. Done in parallel\n const [inboxDataSet, archiveDataSet, unreadCount] = await Promise.all([\n this.fetchCachableDataSet({ fetch: client.inbox.getMessages(), feedType: 'inbox', canUseCache: properties.canUseCache }),\n this.fetchCachableDataSet({ fetch: client.inbox.getArchivedMessages(), feedType: 'archive', canUseCache: properties.canUseCache }),\n this.fetchUnreadCount(properties),\n ]);\n\n // Update the local data\n this._inboxDataSet = inboxDataSet;\n this._archiveDataSet = archiveDataSet;\n this._unreadCount = unreadCount;\n\n // Notify the listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error loading inbox:', error);\n this._dataStoreListeners.forEach(listener => {\n listener.events.onError?.(error as Error);\n });\n }\n }\n\n // Connect the socket\n public async listenForUpdates() {\n try {\n await this.connectSocket();\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error listening for updates:', error);\n this._dataStoreListeners.forEach(listener => {\n listener.events.onError?.(error as Error);\n });\n }\n }\n\n private async connectSocket() {\n const socket = Courier.shared.client?.inbox.socket;\n\n try {\n // If the socket is not available, return early\n if (!socket) {\n Courier.shared.client?.options.logger?.info('CourierInbox socket not available');\n return;\n }\n\n // Remove any existing listener before adding a new one.\n // This both prevents multiple listeners from being added to the same WebSocket client\n // and makes sure the listener is on the current WebSocket client (rather than maintaining\n // one from a stale client).\n if (this._removeMessageEventListener) {\n this._removeMessageEventListener();\n }\n\n // Handle message events and store the removal function\n this._removeMessageEventListener = socket.addMessageEventListener((event: InboxMessageEventEnvelope) => {\n if (event.event === InboxMessageEvent.NewMessage) {\n const message: InboxMessage = event.data as InboxMessage;\n this.addMessage(message, 0, 'inbox');\n return;\n }\n\n const message = this.getMessage({ messageId: event.messageId });\n\n switch (event.event) {\n case InboxMessageEvent.MarkAllRead:\n this.readAllMessages({ canCallApi: false });\n break;\n case InboxMessageEvent.Read:\n if (message) {\n this.readMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Unread:\n if (message) {\n this.unreadMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Opened:\n if (message) {\n this.openMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Archive:\n if (message) {\n this.archiveMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.ArchiveRead:\n this.archiveReadMessages({ canCallApi: false });\n break;\n case InboxMessageEvent.ArchiveAll:\n this.archiveAllMessages({ canCallApi: false });\n break;\n case InboxMessageEvent.Clicked:\n if (message) {\n this.clickMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Unarchive:\n if (message) {\n this.unarchiveMessage({ message, canCallApi: false });\n }\n break;\n case InboxMessageEvent.Unopened:\n break;\n }\n });\n\n // If the socket is already connecting or open, return early\n if (socket.isConnecting || socket.isOpen) {\n Courier.shared.client?.options.logger?.info(`Inbox socket already connecting or open for client ID: [${Courier.shared.client?.options.connectionId}]`);\n return;\n }\n\n // Connect to the socket. By default, the socket will subscribe to all events for the user after opening.\n await socket.connect();\n Courier.shared.client?.options.logger?.info(`Inbox socket connected for client ID: [${Courier.shared.client?.options.connectionId}]`);\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to connect socket:', error);\n }\n }\n\n /**\n * Get a message by messageId from the inbox or archive data set\n * @param props - The message ID\n * @returns The message or undefined if it is not found\n */\n private getMessage(props: { messageId?: string }): InboxMessage | undefined {\n if (!props.messageId) {\n return undefined;\n }\n\n return this._inboxDataSet?.messages.find(m => m.messageId === props.messageId) ??\n this._archiveDataSet?.messages.find(m => m.messageId === props.messageId);\n }\n\n /**\n * Fetch the next page of messages\n * @param props - The feed type\n * @returns The next page of messages or null if there is no next page\n */\n async fetchNextPageOfMessages(props: { feedType: CourierInboxFeedType }): Promise<InboxDataSet | null> {\n\n switch (props.feedType) {\n case 'inbox':\n\n if (this.isPaginatingInbox) {\n return null;\n }\n\n if (this._inboxDataSet?.canPaginate && this._inboxDataSet.paginationCursor) {\n try {\n this.isPaginatingInbox = true;\n const response = await Courier.shared.client?.inbox.getMessages({\n paginationLimit: Courier.shared.paginationLimit,\n startCursor: this._inboxDataSet.paginationCursor\n });\n const dataSet: InboxDataSet = {\n feedType: 'inbox',\n messages: response?.data?.messages?.nodes ?? [],\n canPaginate: response?.data?.messages?.pageInfo?.hasNextPage ?? false,\n paginationCursor: response?.data?.messages?.pageInfo?.startCursor ?? null\n };\n this.addPage(dataSet);\n return dataSet;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error fetching next page of inbox messages:', error);\n return null;\n } finally {\n this.isPaginatingInbox = false;\n }\n }\n\n break;\n case 'archive':\n\n if (this.isPaginatingArchive) {\n return null;\n }\n\n if (this._archiveDataSet?.canPaginate && this._archiveDataSet.paginationCursor) {\n try {\n this.isPaginatingArchive = true;\n const response = await Courier.shared.client?.inbox.getArchivedMessages({\n paginationLimit: Courier.shared.paginationLimit,\n startCursor: this._archiveDataSet.paginationCursor\n });\n const dataSet: InboxDataSet = {\n feedType: 'archive',\n messages: response?.data?.messages?.nodes ?? [],\n canPaginate: response?.data?.messages?.pageInfo?.hasNextPage ?? false,\n paginationCursor: response?.data?.messages?.pageInfo?.startCursor ?? null\n };\n this.addPage(dataSet);\n return dataSet;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error fetching next page of archived messages:', error);\n return null;\n } finally {\n this.isPaginatingArchive = false;\n }\n }\n\n break;\n }\n\n return null;\n }\n\n /**\n * Check if the datastore is loaded and ready to perform mutations\n * @returns True if the datastore is loaded and ready to perform mutations, false otherwise\n */\n private canMutate(): boolean {\n return !!(Courier.shared.client && this._inboxDataSet && this._archiveDataSet);\n }\n\n async readMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the datastore snapshot\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Copy original message and index\n const snapshot = this.getMessageSnapshot(message);\n\n // If the message is already read, return\n if (snapshot.message.read) {\n return;\n }\n\n try {\n\n // Read the message\n snapshot.message.read = new Date().toISOString();\n this.applyMessageSnapshot(snapshot);\n\n // Update the unread count\n this._unreadCount = datastoreSnapshot.unreadCount - 1;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.read({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error reading message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async unreadMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the datastore snapshot\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Save original message and index\n const snapshot = this.getMessageSnapshot(message);\n\n // If the message is already unread, return\n if (!snapshot.message.read) {\n return;\n }\n\n try {\n\n // Unread the message\n snapshot.message.read = undefined;\n\n // Apply the message snapshot\n this.applyMessageSnapshot(snapshot);\n\n // Update the unread count\n this._unreadCount = datastoreSnapshot.unreadCount + 1;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.unread({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error unreading message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async openMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Mutable copy of the message\n const snapshot = this.getMessageSnapshot(message);\n\n // If the message is not in the inbox or archive, return\n if (snapshot.inboxIndex === undefined && snapshot.archiveIndex === undefined) {\n return;\n }\n\n // If the message is already opened, return\n if (snapshot.message.opened) {\n return;\n }\n\n try {\n snapshot.message.opened = new Date().toISOString();\n this.applyMessageSnapshot(snapshot);\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.open({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error opening message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async clickMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n try {\n if (message.trackingIds?.clickTrackingId && canCallApi) {\n await Courier.shared.client?.inbox.click({\n messageId: message.messageId,\n trackingId: message.trackingIds?.clickTrackingId\n });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error clicking message:', error);\n }\n }\n\n async archiveMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the message snapshot\n const messageSnapshot = this.getMessageSnapshot(message);\n\n // If the message is not in the inbox, return\n if (messageSnapshot.inboxIndex === undefined) {\n return;\n }\n\n // Get the datastore snapshots\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n // Update the message to be archived\n message.archived = new Date().toISOString();\n\n // Remove message from local state\n this.removeMessage(message, messageSnapshot.inboxIndex, 'inbox');\n\n // Find index to insert archived message and add to archive\n if (this._archiveDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._archiveDataSet);\n this.addMessage(message, insertIndex, 'archive');\n }\n\n // Call API to archive message\n if (canCallApi) {\n await Courier.shared.client?.inbox.archive({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error archiving message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async unarchiveMessage({ message, canCallApi = true }: { message: InboxMessage; canCallApi?: boolean; }): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get the datastore snapshots\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n // Get the message snapshot\n const messageSnapshot = this.getMessageSnapshot(message);\n\n // If the message is not in the archive, return\n if (messageSnapshot.archiveIndex === undefined) {\n return;\n }\n\n try {\n\n // Update the message to be unarchived\n messageSnapshot.message.archived = undefined;\n\n // Remove message from local state\n this.removeMessage(message, messageSnapshot.archiveIndex, 'archive');\n\n // Find index to insert unarchived message and add to inbox\n if (this._inboxDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._inboxDataSet);\n this.addMessage(message, insertIndex, 'inbox');\n }\n\n // Call API to unarchive message\n if (canCallApi) {\n await Courier.shared.client?.inbox.unarchive({ messageId: message.messageId });\n }\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error unarchiving message:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async archiveReadMessages({ canCallApi = true }: { canCallApi?: boolean; } = {}): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get snapshot of the inbox data set\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n const timestamp = new Date().toISOString();\n\n // Archive all read messages\n const messagesToArchive = this._inboxDataSet?.messages.filter(message => message.read) ?? [];\n messagesToArchive.forEach(message => {\n\n // Update the message to be archived\n message.archived = timestamp;\n\n // Remove message from inbox\n const inboxIndex = this._inboxDataSet?.messages.findIndex(m => m.messageId === message.messageId);\n if (inboxIndex !== undefined && inboxIndex !== -1) {\n this._inboxDataSet?.messages.splice(inboxIndex, 1);\n }\n\n // Add message to archive\n if (this._archiveDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._archiveDataSet);\n this._archiveDataSet.messages.splice(insertIndex, 0, message);\n }\n\n });\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n });\n\n // Call API to archive read messages\n if (canCallApi) {\n await Courier.shared.client?.inbox.archiveRead();\n }\n\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error archiving read messages:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async archiveAllMessages({ canCallApi = true }: { canCallApi?: boolean; } = {}): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Get snapshot of the inbox data set\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n const timestamp = new Date().toISOString();\n\n // Archive all read messages\n this._inboxDataSet?.messages.forEach(message => {\n message.archived = timestamp;\n\n // Add message to archive\n if (this._archiveDataSet?.messages) {\n const insertIndex = this.findInsertIndex(message, this._archiveDataSet);\n this._archiveDataSet.messages.splice(insertIndex, 0, message);\n }\n\n });\n\n // Clear the inbox data set\n this._inboxDataSet = {\n messages: [],\n canPaginate: false,\n paginationCursor: null,\n feedType: 'inbox',\n };\n\n // Update the unread count\n this._unreadCount = 0;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n // Call API to archive all messages\n if (canCallApi) {\n await Courier.shared.client?.inbox.archiveAll();\n }\n\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error archiving all messages:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n async readAllMessages({ canCallApi = true }: { canCallApi?: boolean; } = {}): Promise<void> {\n if (!this.canMutate()) {\n return;\n }\n\n // Store original state for potential rollback\n const datastoreSnapshot = this.getDatastoreSnapshot(this.unreadCount, this._inboxDataSet, this._archiveDataSet);\n\n try {\n\n const timestamp = new Date().toISOString();\n\n // Read all messages\n this._inboxDataSet?.messages.forEach(message => {\n if (!message.read) {\n message.read = timestamp;\n }\n });\n\n // Read all archived messages\n this._archiveDataSet?.messages.forEach(message => {\n if (!message.read) {\n message.read = timestamp;\n }\n });\n\n // Update unread count\n this._unreadCount = 0;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(this._unreadCount!);\n });\n\n if (canCallApi) {\n await Courier.shared.client?.inbox.readAll();\n }\n\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Error reading all messages:', error);\n this.applyDatastoreSnapshot(datastoreSnapshot);\n }\n }\n\n /**\n * Find the insert index for a new message in a data set\n * @param newMessage - The new message to insert\n * @param dataSet - The data set to insert the message into\n * @returns The index to insert the message at\n */\n private findInsertIndex(newMessage: InboxMessage, dataSet: InboxDataSet): number {\n const messages = dataSet.messages;\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n if (message.created && newMessage.created && message.created < newMessage.created) {\n return i;\n }\n }\n\n return messages.length;\n }\n\n private addPage(dataSet: InboxDataSet) {\n switch (dataSet.feedType) {\n case 'inbox':\n if (this._inboxDataSet) {\n this._inboxDataSet.canPaginate = dataSet.canPaginate;\n this._inboxDataSet.paginationCursor = dataSet.paginationCursor;\n this._inboxDataSet.messages = [...this._inboxDataSet.messages, ...dataSet.messages];\n }\n break;\n case 'archive':\n if (this._archiveDataSet) {\n this._archiveDataSet.canPaginate = dataSet.canPaginate;\n this._archiveDataSet.paginationCursor = dataSet.paginationCursor;\n this._archiveDataSet.messages = [...this._archiveDataSet.messages, ...dataSet.messages];\n }\n break;\n }\n this._dataStoreListeners.forEach(listener =>\n listener.events.onPageAdded?.(dataSet, dataSet.feedType)\n );\n }\n\n private addMessage(message: InboxMessage, index: number, feedType: CourierInboxFeedType) {\n switch (feedType) {\n case 'inbox':\n if (!message.read && this._unreadCount !== undefined) {\n this._unreadCount = this._unreadCount + 1;\n }\n this._inboxDataSet?.messages.splice(index, 0, message);\n break;\n case 'archive':\n this._archiveDataSet?.messages.splice(index, 0, message);\n break;\n }\n this._dataStoreListeners.forEach(listener => {\n listener.events.onMessageAdd?.(message, index, feedType);\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n }\n\n private removeMessage(message: InboxMessage, index: number, feedType: CourierInboxFeedType) {\n switch (feedType) {\n case 'inbox':\n if (!message.read && this._unreadCount !== undefined) {\n this._unreadCount = this._unreadCount - 1;\n }\n this._inboxDataSet?.messages.splice(index, 1);\n break;\n case 'archive':\n this._archiveDataSet?.messages.splice(index, 1);\n break;\n }\n this._dataStoreListeners.forEach(listener => {\n listener.events.onMessageRemove?.(message, index, feedType);\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n }\n\n /**\n * Apply a message snapshot to the data store\n * @param snapshot - The message snapshot to apply\n */\n private applyMessageSnapshot(snapshot: MessageSnapshot) {\n if (snapshot.archiveIndex !== undefined) {\n this.updateMessage(snapshot.message, snapshot.archiveIndex, 'archive');\n }\n if (snapshot.inboxIndex !== undefined) {\n this.updateMessage(snapshot.message, snapshot.inboxIndex, 'inbox');\n }\n }\n\n private applyDatastoreSnapshot(snapshot: DataSetSnapshot) {\n const { unreadCount, inbox, archive } = snapshot;\n\n // Update the data sets\n this._inboxDataSet = inbox;\n this._archiveDataSet = archive;\n\n // Notify listeners\n this._dataStoreListeners.forEach(listener => {\n if (this._inboxDataSet) {\n listener.events.onDataSetChange?.(this._inboxDataSet, 'inbox');\n }\n if (this._archiveDataSet) {\n listener.events.onDataSetChange?.(this._archiveDataSet, 'archive');\n }\n listener.events.onUnreadCountChange?.(unreadCount);\n });\n }\n\n /**\n * Update a message in the data store\n * @param message - The message to update\n * @param index - The index of the message in its respective data set\n * @param feedType - The feed type of the message\n */\n private updateMessage(message: InboxMessage, index: number, feedType: CourierInboxFeedType) {\n switch (feedType) {\n case 'inbox':\n if (this._inboxDataSet) {\n this._inboxDataSet.messages[index] = message;\n }\n break;\n case 'archive':\n if (this._archiveDataSet) {\n this._archiveDataSet.messages[index] = message;\n }\n break;\n }\n this._dataStoreListeners.forEach(listener => {\n listener.events.onMessageUpdate?.(message, index, feedType);\n listener.events.onUnreadCountChange?.(this._unreadCount ?? 0);\n });\n }\n\n /**\n * Copy an inbox data set\n * @param dataSet - The inbox data set to copy\n * @returns A copy of the inbox data set\n */\n private getDatastoreSnapshot(unreadCount: number, inboxDataSet?: InboxDataSet, archiveDataSet?: InboxDataSet): DataSetSnapshot {\n return {\n unreadCount,\n inbox: copyInboxDataSet(inboxDataSet),\n archive: copyInboxDataSet(archiveDataSet),\n };\n }\n\n /**\n * Copy an inbox message with its archive and inbox indices\n * @param message - The inbox message to copy\n * @returns A copy of the inbox message with its archive and inbox indices\n */\n private getMessageSnapshot(message: InboxMessage): MessageSnapshot {\n const archiveIndex = this._archiveDataSet\n ? this._archiveDataSet.messages.findIndex(m => m.messageId === message.messageId)\n : undefined;\n\n const inboxIndex = this._inboxDataSet\n ? this._inboxDataSet.messages.findIndex(m => m.messageId === message.messageId)\n : undefined;\n\n return {\n message: copyMessage(message),\n archiveIndex,\n inboxIndex,\n };\n }\n\n}\n","import { InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierBaseElement, CourierButton, CourierIcon, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { getMessageTime } from \"../utils/utils\";\nimport { CourierInboxListItemMenu, CourierInboxListItemActionMenuOption } from \"./courier-inbox-list-item-menu\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\n\nexport class CourierInboxListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item';\n }\n\n // State\n private _themeManager: CourierInboxThemeManager;\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\n private _canClick: boolean = false;\n // private _canLongPress: boolean = false; // Unused for now. But we can use this in the future if needed.\n\n // Elements\n private _titleElement?: HTMLParagraphElement;\n private _subtitleElement?: HTMLParagraphElement;\n private _timeElement?: HTMLParagraphElement;\n private _menu?: CourierInboxListItemMenu;\n private _unreadIndicator?: HTMLDivElement;\n private _actionsContainer?: HTMLDivElement;\n\n // Touch gestures\n private _longPressTimeout: number | null = null;\n private _isLongPress: boolean = false;\n\n // Intersection Observer\n private _observer?: IntersectionObserver;\n\n // Callbacks\n private onItemClick: ((message: InboxMessage) => void) | null = null;\n private onItemLongPress: ((message: InboxMessage) => void) | null = null;\n private onItemActionClick: ((message: InboxMessage, action: InboxAction) => void) | null = null;\n private onItemVisible: ((message: InboxMessage) => void) | null = null;\n\n constructor(themeManager: CourierInboxThemeManager, canClick: boolean, _canLongPress: boolean) {\n super();\n this._canClick = canClick;\n // this._canLongPress = canLongPress;\n this._themeManager = themeManager;\n this._theme = themeManager.getTheme();\n this._isMobile = 'ontouchstart' in window;\n this.render();\n this._setupIntersectionObserver();\n }\n\n private render() {\n\n const contentContainer = document.createElement('div');\n contentContainer.className = 'content-container';\n\n // Title\n this._titleElement = document.createElement('p');\n this._titleElement.className = 'title';\n\n // Subtitle\n this._subtitleElement = document.createElement('p');\n this._subtitleElement.className = 'subtitle';\n\n // Actions\n this._actionsContainer = document.createElement('div');\n this._actionsContainer.className = 'actions-container';\n\n contentContainer.appendChild(this._titleElement);\n contentContainer.appendChild(this._subtitleElement);\n contentContainer.appendChild(this._actionsContainer);\n\n // Time\n this._timeElement = document.createElement('p');\n this._timeElement.className = 'time';\n\n // Unread indicator\n this._unreadIndicator = document.createElement('div');\n this._unreadIndicator.className = 'unread-indicator';\n\n // Action menu\n this._menu = new CourierInboxListItemMenu(this._theme);\n this._menu.setOptions(this._getMenuOptions());\n\n // Append elements into shadow‑DOM\n this.append(this._unreadIndicator, contentContainer, this._timeElement, this._menu);\n\n const cancelPropagation = (e: Event): void => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n this._menu.addEventListener('mousedown', cancelPropagation);\n this._menu.addEventListener('pointerdown', cancelPropagation);\n this._menu.addEventListener('click', cancelPropagation);\n\n this.addEventListener('click', (e) => {\n if (!this._canClick) return;\n if (this._menu && (this._menu.contains(e.target as Node) || e.composedPath().includes(this._menu))) {\n return;\n }\n if (this._message && this.onItemClick && !(e.target instanceof CourierIcon) && !this._isLongPress) {\n this.onItemClick(this._message);\n }\n });\n\n this._setupHoverBehavior();\n this._setupLongPressBehavior();\n\n // Enable clickable class if canClick\n if (this._canClick) {\n this.classList.add('clickable');\n }\n }\n\n private _setupIntersectionObserver(): void {\n // Only set up if running in browser and IntersectionObserver is available\n if (typeof window === \"undefined\" || typeof IntersectionObserver === \"undefined\") {\n return;\n }\n\n // Clean up any previous observer\n if (this._observer) {\n this._observer.disconnect();\n }\n\n this._observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio === 1 && this.onItemVisible && this._message) {\n this.onItemVisible(this._message);\n }\n });\n }, { threshold: 1.0 });\n\n this._observer.observe(this);\n }\n\n onComponentUnmounted() {\n this._observer?.disconnect();\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const list = theme.inbox?.list;\n\n return `\n ${CourierInboxListItem.id} {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n border-bottom: ${list?.item?.divider ?? '1px solid red'};\n font-family: inherit;\n cursor: default;\n transition: background-color 0.2s ease;\n margin: 0;\n width: 100%;\n box-sizing: border-box;\n padding: 12px 20px;\n position: relative;\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: manipulation;\n }\n\n /* Only apply hover/active background if clickable */\n @media (hover: hover) {\n ${CourierInboxListItem.id}.clickable:hover {\n cursor: pointer;\n background-color: ${list?.item?.hoverBackgroundColor ?? 'red'};\n }\n }\n\n ${CourierInboxListItem.id}.clickable:active {\n cursor: pointer;\n background-color: ${list?.item?.activeBackgroundColor ?? 'red'};\n }\n\n /* Menu hover / active */\n @media (hover: hover) {\n ${CourierInboxListItem.id}.clickable:hover:has(courier-inbox-list-item-menu:hover, courier-inbox-list-item-menu *:hover, courier-button:hover, courier-button *:hover) {\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n }\n }\n\n ${CourierInboxListItem.id}.clickable:active:has(courier-inbox-list-item-menu:active, courier-inbox-list-item-menu *:active, courier-button:active, courier-button *:active) {\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n }\n\n ${CourierInboxListItem.id}:last-child {\n border-bottom: none;\n }\n\n ${CourierInboxListItem.id} .unread-indicator {\n position: absolute;\n top: 28px;\n left: 6px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: ${list?.item?.unreadIndicatorColor ?? 'red'};\n display: none;\n }\n\n ${CourierInboxListItem.id}.unread .unread-indicator {\n display: block;\n }\n\n ${CourierInboxListItem.id} .content-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin-right: 12px;\n }\n\n ${CourierInboxListItem.id} p {\n margin: 0;\n overflow-wrap: break-word;\n word-break: break-word;\n hyphens: auto;\n line-height: 1.4;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n text-align: left;\n }\n\n ${CourierInboxListItem.id} .title {\n font-family: ${list?.item?.title?.family ?? 'inherit'};\n font-size: ${list?.item?.title?.size ?? '14px'};\n color: ${list?.item?.title?.color ?? 'red'};\n margin-bottom: 4px;\n }\n\n ${CourierInboxListItem.id} .subtitle {\n font-family: ${list?.item?.subtitle?.family ?? 'inherit'};\n font-size: ${list?.item?.subtitle?.size ?? '14px'};\n color: ${list?.item?.subtitle?.color ?? 'red'};\n }\n\n ${CourierInboxListItem.id} .time {\n font-family: ${list?.item?.time?.family ?? 'inherit'};\n font-size: ${list?.item?.time?.size ?? '14px'};\n color: ${list?.item?.time?.color ?? 'red'};\n text-align: right;\n white-space: nowrap;\n }\n\n ${CourierInboxListItem.id} courier-inbox-list-item-menu {\n z-index: 1;\n position: absolute;\n top: 8px;\n right: 8px;\n display: none;\n }\n\n ${CourierInboxListItem.id} .actions-container {\n display: flex;\n margin-top: 10px;\n flex-wrap: wrap;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n display: none;\n }\n `;\n\n }\n\n private _setupHoverBehavior(): void {\n // Only show menu on hover for non-mobile devices and if canClick\n if (!this._isMobile) {\n this.addEventListener('mouseenter', () => {\n this._isLongPress = false;\n this._showMenu();\n });\n this.addEventListener('mouseleave', () => this._hideMenu());\n }\n }\n\n private _setupLongPressBehavior(): void {\n const menu = this._theme.inbox?.list?.item?.menu\n\n if (!menu?.enabled) {\n return;\n }\n\n const longPress = menu.longPress;\n\n this.addEventListener(\n 'touchstart',\n () => {\n // Start long press timer\n this._longPressTimeout = window.setTimeout(() => {\n this._isLongPress = true;\n this._showMenu();\n if (this._message && this.onItemLongPress) {\n this.onItemLongPress(this._message);\n // Vibrate device if supported\n if (navigator.vibrate) {\n navigator.vibrate(longPress?.vibrationDuration ?? 50);\n }\n }\n // Keep the menu visible for 2 s, then hide again\n setTimeout(() => {\n this._hideMenu();\n this._isLongPress = false;\n }, longPress?.displayDuration ?? 2000);\n }, 650);\n },\n { passive: true },\n );\n\n this.addEventListener('touchend', () => {\n // Clear long press timeout\n if (this._longPressTimeout) {\n window.clearTimeout(this._longPressTimeout);\n this._longPressTimeout = null;\n }\n });\n }\n\n // Helpers\n private _getMenuOptions(): CourierInboxListItemActionMenuOption[] {\n const menuTheme = this._theme.inbox?.list?.item?.menu?.item;\n let options: CourierInboxListItemActionMenuOption[] = [];\n\n const isArchiveFeed = this._feedType === 'archive';\n\n // Only add read/unread option if not in archive feed\n if (!isArchiveFeed) {\n options.push({\n id: this._message?.read ? 'unread' : 'read',\n icon: {\n svg: this._message?.read ? menuTheme?.unread?.svg : menuTheme?.read?.svg,\n color: this._message?.read ? menuTheme?.unread?.color : menuTheme?.read?.color ?? 'red',\n },\n onClick: () => {\n if (this._message) {\n if (this._message.read) {\n CourierInboxDatastore.shared.unreadMessage({ message: this._message });\n } else {\n CourierInboxDatastore.shared.readMessage({ message: this._message });\n }\n }\n },\n });\n }\n\n options.push({\n id: isArchiveFeed ? 'unarchive' : 'archive',\n icon: {\n svg: isArchiveFeed ? menuTheme?.unarchive?.svg : menuTheme?.archive?.svg,\n color: isArchiveFeed ? menuTheme?.unarchive?.color : menuTheme?.archive?.color ?? 'red',\n },\n onClick: () => {\n if (this._message) {\n if (isArchiveFeed) {\n CourierInboxDatastore.shared.unarchiveMessage({ message: this._message });\n } else {\n CourierInboxDatastore.shared.archiveMessage({ message: this._message });\n }\n }\n },\n });\n\n return options;\n }\n\n // Menu visibility helpers\n private _showMenu(): void {\n const menu = this._theme.inbox?.list?.item?.menu;\n\n if (menu && menu.enabled && this._menu && this._timeElement) {\n this._menu.setOptions(this._getMenuOptions());\n this._menu.style.display = 'block';\n this._menu.show();\n this._timeElement.style.opacity = '0';\n }\n }\n\n private _hideMenu(): void {\n const menu = this._theme.inbox?.list?.item?.menu;\n\n if (menu && menu.enabled && this._menu && this._timeElement) {\n this._menu.hide();\n this._menu.style.display = 'none';\n this._timeElement.style.opacity = '1';\n }\n }\n\n // Public API\n public setMessage(message: InboxMessage, feedType: CourierInboxFeedType): void {\n this._message = message;\n this._feedType = feedType;\n this._updateContent();\n }\n\n public setOnItemClick(cb: (message: InboxMessage) => void): void {\n this.onItemClick = cb;\n }\n\n public setOnItemActionClick(cb: (message: InboxMessage, action: InboxAction) => void): void {\n this.onItemActionClick = cb;\n }\n\n public setOnItemLongPress(cb: (message: InboxMessage) => void): void {\n this.onItemLongPress = cb;\n }\n\n public setOnItemVisible(cb: (message: InboxMessage) => void): void {\n this.onItemVisible = cb;\n }\n\n // Content rendering\n private _updateContent(): void {\n\n if (!this._message) {\n if (this._titleElement) this._titleElement.textContent = '';\n if (this._subtitleElement) this._subtitleElement.textContent = '';\n return;\n }\n\n // Unread marker\n this.classList.toggle('unread', !this._message.read && this._feedType !== 'archive');\n\n if (this._titleElement) {\n this._titleElement.textContent = this._message.title || 'Untitled Message';\n }\n if (this._subtitleElement) {\n this._subtitleElement.textContent = this._message.preview || this._message.body || '';\n }\n if (this._timeElement) {\n this._timeElement.textContent = getMessageTime(this._message);\n }\n\n // Update menu icons (e.g. read/unread)\n if (this._menu) {\n this._menu.setOptions(this._getMenuOptions());\n }\n\n // Update actions container\n const hasActions = this._message.actions && this._message.actions.length > 0;\n if (this._actionsContainer) {\n this._actionsContainer.style.display = hasActions ? 'flex' : 'none';\n }\n\n const actionsTheme = this._theme.inbox?.list?.item?.actions;\n\n // Add the actions to the actions container\n if (this._actionsContainer && this._message.actions) {\n this._actionsContainer.innerHTML = \"\"; // Clear previous actions to avoid duplicates\n this._message.actions.forEach(action => {\n // Create the action element\n const actionButton = new CourierButton({\n mode: this._themeManager.mode,\n text: action.content,\n variant: 'secondary',\n backgroundColor: actionsTheme?.backgroundColor,\n hoverBackgroundColor: actionsTheme?.hoverBackgroundColor,\n activeBackgroundColor: actionsTheme?.activeBackgroundColor,\n border: actionsTheme?.border,\n borderRadius: actionsTheme?.borderRadius,\n shadow: actionsTheme?.shadow,\n fontFamily: actionsTheme?.font?.family,\n fontSize: actionsTheme?.font?.size,\n fontWeight: actionsTheme?.font?.weight,\n textColor: actionsTheme?.font?.color,\n onClick: () => {\n if (this._message && this.onItemActionClick) {\n this.onItemActionClick(this._message, action);\n }\n },\n });\n\n // Add the action element to the actions container\n this._actionsContainer?.appendChild(actionButton);\n });\n }\n }\n}\n\nregisterElement(CourierInboxListItem);","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list-item';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonListItem.id, CourierInboxSkeletonListItem.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n // Create skeleton items using CourierSkeletonAnimatedRow\n const firstRow = new CourierSkeletonAnimatedRow(this._theme);\n const secondRow = new CourierSkeletonAnimatedRow(this._theme);\n const thirdRow = new CourierSkeletonAnimatedRow(this._theme);\n\n this.appendChild(firstRow);\n this.appendChild(secondRow);\n this.appendChild(thirdRow);\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxSkeletonListItem.id} {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n width: 100%;\n box-sizing: border-box;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:first-child {\n width: 35%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(2) {\n width: 100%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(3) {\n width: 82%;\n }\n `;\n }\n}\n\n// Register the custom element\nregisterElement(CourierInboxSkeletonListItem);\n\nclass CourierSkeletonAnimatedRow extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-skeleton-animated-row';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierSkeletonAnimatedRow.id, CourierSkeletonAnimatedRow.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n const skeletonItem = document.createElement('div');\n skeletonItem.className = 'skeleton-item';\n this.appendChild(skeletonItem);\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n const color = theme.inbox?.loading?.animation?.barColor ?? '#000';\n\n // Handle both 3 and 6 character hex colors\n const hexColor = color.length === 4 ?\n `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` :\n color;\n\n // Convert hex to RGB\n const r = parseInt(hexColor.slice(1, 3), 16);\n const g = parseInt(hexColor.slice(3, 5), 16);\n const b = parseInt(hexColor.slice(5, 7), 16);\n\n const colorWithAlpha80 = `rgba(${r}, ${g}, ${b}, 0.8)`; // 80% opacity\n const colorWithAlpha40 = `rgba(${r}, ${g}, ${b}, 0.4)`; // 40% opacity\n\n return `\n ${CourierSkeletonAnimatedRow.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n }\n\n ${CourierSkeletonAnimatedRow.id} .skeleton-item {\n height: ${theme.inbox?.loading?.animation?.barHeight ?? '14px'};\n width: 100%;\n background: linear-gradient(\n 90deg,\n ${colorWithAlpha80} 25%,\n ${colorWithAlpha40} 50%,\n ${colorWithAlpha80} 75%\n );\n background-size: 200% 100%;\n animation: ${CourierSkeletonAnimatedRow.id}-shimmer ${theme.inbox?.loading?.animation?.duration ?? '2s'} ease-in-out infinite;\n border-radius: ${theme.inbox?.loading?.animation?.barBorderRadius ?? '14px'};\n }\n\n @keyframes ${CourierSkeletonAnimatedRow.id}-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n `;\n }\n}\n\nregisterElement(CourierSkeletonAnimatedRow);\n","import { CourierFactoryElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxSkeletonListItem } from \"./courier-inbox-skeleton-list-item\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonList extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonList.id, CourierInboxSkeletonList.getStyles(this._theme));\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n defaultElement(): HTMLElement {\n const list = document.createElement('div');\n list.className = 'list';\n\n // Create skeleton items\n for (let i = 0; i < 3; i++) {\n const skeletonItem = new CourierInboxSkeletonListItem(this._theme); // TODO: Make this a prop\n list.appendChild(skeletonItem);\n }\n\n this.appendChild(list);\n return list;\n\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxSkeletonList.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list {\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list > * {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 100%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(2) {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 88%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(3) {\n border-bottom: none;\n opacity: 50%;\n }\n `;\n\n }\n}\n\nregisterElement(CourierInboxSkeletonList);\n","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxSkeletonList } from \"./courier-inbox-skeleton-list\";\n\nexport class CourierInboxPaginationListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-pagination-list-item';\n }\n\n // State\n private _theme: CourierInboxTheme;\n\n // Components\n private _style?: HTMLStyleElement;\n private _skeletonLoadingList?: CourierInboxSkeletonList;\n private _observer?: IntersectionObserver;\n private _customItem?: HTMLElement;\n\n // Handlers\n private _onPaginationTrigger: () => void;\n\n constructor(props: { theme: CourierInboxTheme, customItem?: HTMLElement, onPaginationTrigger: () => void }) {\n super();\n this._theme = props.theme;\n this._customItem = props.customItem;\n this._onPaginationTrigger = props.onPaginationTrigger;\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxPaginationListItem.id, CourierInboxPaginationListItem.getStyles(this._theme));\n\n if (this._customItem) {\n this.appendChild(this._customItem);\n } else {\n const container = document.createElement('div');\n container.className = 'skeleton-container';\n\n this._skeletonLoadingList = new CourierInboxSkeletonList(this._theme);\n this._skeletonLoadingList.build(undefined);\n container.appendChild(this._skeletonLoadingList);\n\n this.appendChild(container);\n }\n\n // Initialize intersection observer\n this._observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this._onPaginationTrigger();\n }\n });\n });\n\n // Start observing the element\n this._observer.observe(this);\n\n }\n\n onComponentUnmounted() {\n this._observer?.disconnect();\n this._style?.remove();\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxPaginationListItem.id} {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n }\n\n ${CourierInboxPaginationListItem.id} .skeleton-container {\n height: 150%;\n }\n `;\n }\n\n}\n\nregisterElement(CourierInboxPaginationListItem);\n","import { InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\n\nexport function markAsRead(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.readMessage({ message });\n}\n\nexport function markAsUnread(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.unreadMessage({ message });\n}\n\nexport function clickMessage(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.clickMessage({ message });\n}\n\nexport function archiveMessage(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.archiveMessage({ message });\n}\n\nexport function openMessage(message: InboxMessage): Promise<void> {\n return CourierInboxDatastore.shared.openMessage({ message });\n}\n","import { InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierBaseElement, CourierInfoState, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxListItem } from \"./courier-inbox-list-item\";\nimport { CourierInboxPaginationListItem } from \"./courier-inbox-pagination-list-item\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxStateErrorFactoryProps, CourierInboxStateEmptyFactoryProps, CourierInboxStateLoadingFactoryProps, CourierInboxListItemFactoryProps, CourierInboxPaginationItemFactoryProps } from \"../types/factories\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxSkeletonList } from \"./courier-inbox-skeleton-list\";\nimport { CourierInboxListItemMenu } from \"./courier-inbox-list-item-menu\";\nimport { openMessage } from \"../utils/extensions\";\n\nexport class CourierInboxList extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _messages: InboxMessage[] = [];\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isLoading = true;\n private _error: Error | null = null;\n private _canPaginate = false;\n private _canClickListItems = false;\n private _canLongPressListItems = false;\n\n // Callbacks\n private _onMessageClick: ((message: InboxMessage, index: number) => void) | null = null;\n private _onMessageActionClick: ((message: InboxMessage, action: InboxAction, index: number) => void) | null = null;\n private _onMessageLongPress: ((message: InboxMessage, index: number) => void) | null = null;\n private _onRefresh: () => void;\n\n // Factories\n private _onPaginationTrigger?: (feedType: CourierInboxFeedType) => void;\n private _listItemFactory?: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement;\n private _paginationItemFactory?: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement;\n private _loadingStateFactory?: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement;\n private _emptyStateFactory?: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement;\n private _errorStateFactory?: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement;\n\n // Getters\n public get messages(): InboxMessage[] {\n return this._messages;\n }\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n // Components\n private _listStyles?: HTMLStyleElement;\n private _listItemStyles?: HTMLStyleElement;\n private _listItemMenuStyles?: HTMLStyleElement;\n private _errorContainer?: CourierInfoState;\n private _emptyContainer?: CourierInfoState;\n\n constructor(props: {\n themeManager: CourierInboxThemeManager,\n canClickListItems: boolean,\n canLongPressListItems: boolean,\n onRefresh: () => void,\n onPaginationTrigger: (feedType: CourierInboxFeedType) => void,\n onMessageClick: (message: InboxMessage, index: number) => void,\n onMessageActionClick: (message: InboxMessage, action: InboxAction, index: number) => void,\n onMessageLongPress: (message: InboxMessage, index: number) => void\n }) {\n super();\n\n // Initialize the callbacks\n this._onRefresh = props.onRefresh;\n this._onPaginationTrigger = props.onPaginationTrigger;\n this._onMessageClick = props.onMessageClick;\n this._onMessageActionClick = props.onMessageActionClick;\n this._onMessageLongPress = props.onMessageLongPress;\n\n // Initialize the theme subscription\n this._themeSubscription = props.themeManager.subscribe((_: CourierInboxTheme) => {\n this.render();\n });\n\n }\n\n onComponentMounted() {\n\n // Inject styles at head\n // Since list items and menus don't listen to theme changes directly, their styles are created\n // at the parent level, and the parent manages their theming updates.\n this._listStyles = injectGlobalStyle(CourierInboxList.id, CourierInboxList.getStyles(this.theme));\n this._listItemStyles = injectGlobalStyle(CourierInboxListItem.id, CourierInboxListItem.getStyles(this.theme));\n this._listItemMenuStyles = injectGlobalStyle(CourierInboxListItemMenu.id, CourierInboxListItemMenu.getStyles(this.theme));\n\n // Layout the component\n this.render();\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._listStyles?.remove();\n this._listItemStyles?.remove();\n this._listItemMenuStyles?.remove();\n }\n\n public setCanClickListItems(canClick: boolean) {\n this._canClickListItems = canClick;\n }\n\n public setCanLongPressListItems(canLongPress: boolean) {\n this._canLongPressListItems = canLongPress;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const list = theme.inbox?.list;\n\n return `\n ${CourierInboxList.id} {\n flex: 1;\n width: 100%;\n background-color: ${list?.backgroundColor ?? 'red'};\n }\n\n ${CourierInboxList.id} ul {\n list-style: none;\n padding: 0;\n margin: 0;\n height: 100%;\n }\n `;\n\n }\n\n public setDataSet(dataSet: InboxDataSet): void {\n this._messages = [...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addPage(dataSet: InboxDataSet): void {\n this._messages = [...this._messages, ...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addMessage(message: InboxMessage, index = 0): void {\n this._messages.splice(index, 0, message);\n this.render();\n }\n\n public removeMessage(index = 0): void {\n this._messages.splice(index, 1);\n this.render();\n }\n\n public updateMessage(message: InboxMessage, index = 0): void {\n this._messages[index] = message;\n this.render();\n }\n\n public setFeedType(feedType: CourierInboxFeedType): void {\n this._feedType = feedType;\n this._error = null;\n this._isLoading = true;\n this.render();\n }\n\n public setLoading(isLoading: boolean): void {\n this._error = null;\n this._isLoading = isLoading;\n this.render();\n }\n\n public setError(error: Error | null): void {\n this._error = error;\n this._isLoading = false;\n this._messages = [];\n this.render();\n }\n\n public setErrorNoClient(): void {\n this.setError(new Error('No user signed in'));\n }\n\n private handleRetry(): void {\n this._onRefresh();\n }\n\n private handleRefresh(): void {\n this._onRefresh();\n }\n\n public refreshInfoStateThemes() {\n this._emptyContainer?.updateStyles(this.errorProps);\n this._emptyContainer?.updateStyles(this.emptyProps);\n }\n\n get errorProps(): any {\n const error = this.theme.inbox?.error;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: error?.title?.text ?? this._error?.message,\n textColor: error?.title?.font?.color,\n fontFamily: error?.title?.font?.family,\n fontSize: error?.title?.font?.size,\n fontWeight: error?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: error?.button?.text,\n backgroundColor: error?.button?.backgroundColor,\n hoverBackgroundColor: error?.button?.hoverBackgroundColor,\n activeBackgroundColor: error?.button?.activeBackgroundColor,\n textColor: error?.button?.font?.color,\n fontFamily: error?.button?.font?.family,\n fontSize: error?.button?.font?.size,\n fontWeight: error?.button?.font?.weight,\n shadow: error?.button?.shadow,\n border: error?.button?.border,\n borderRadius: error?.button?.borderRadius,\n onClick: () => this.handleRetry()\n }\n };\n }\n\n get emptyProps(): any {\n const empty = this.theme.inbox?.empty;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: empty?.title?.text ?? `No ${this._feedType} messages yet`,\n textColor: empty?.title?.font?.color,\n fontFamily: empty?.title?.font?.family,\n fontSize: empty?.title?.font?.size,\n fontWeight: empty?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: empty?.button?.text,\n backgroundColor: empty?.button?.backgroundColor,\n hoverBackgroundColor: empty?.button?.hoverBackgroundColor,\n activeBackgroundColor: empty?.button?.activeBackgroundColor,\n textColor: empty?.button?.font?.color,\n fontFamily: empty?.button?.font?.family,\n fontSize: empty?.button?.font?.size,\n fontWeight: empty?.button?.font?.weight,\n shadow: empty?.button?.shadow,\n border: empty?.button?.border,\n borderRadius: empty?.button?.borderRadius,\n onClick: () => this.handleRefresh()\n },\n };\n }\n\n private render(): void {\n\n // Remove all existing elements\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n this._errorContainer = undefined;\n this._emptyContainer = undefined;\n }\n\n // Update list styles\n if (this._listStyles) {\n this._listStyles.textContent = CourierInboxList.getStyles(this.theme);\n }\n\n // Update list item styles\n if (this._listItemStyles) {\n this._listItemStyles.textContent = CourierInboxListItem.getStyles(this.theme);\n }\n\n // Update list item menu styles\n if (this._listItemMenuStyles) {\n this._listItemMenuStyles.textContent = CourierInboxListItemMenu.getStyles(this.theme);\n }\n\n // Error state\n if (this._error) {\n this._errorContainer = new CourierInfoState(this.errorProps);\n this._errorContainer.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n this.appendChild(this._errorContainer);\n return;\n }\n\n // Loading state\n if (this._isLoading) {\n const loadingElement = new CourierInboxSkeletonList(this.theme);\n loadingElement.build(this._loadingStateFactory?.({ feedType: this._feedType }));\n this.appendChild(loadingElement);\n return;\n }\n\n // Empty state\n if (this._messages.length === 0) {\n this._emptyContainer = new CourierInfoState(this.emptyProps);\n this._emptyContainer.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n this.appendChild(this._emptyContainer);\n return;\n }\n\n // Create list before adding messages\n const list = document.createElement('ul');\n this.appendChild(list);\n\n // Add messages to the list\n this._messages.forEach((message, index) => {\n if (this._listItemFactory) {\n list.appendChild(this._listItemFactory({ message, index }));\n return;\n }\n const listItem = new CourierInboxListItem(this._themeSubscription.manager, this._canClickListItems, this._canLongPressListItems);\n listItem.setMessage(message, this._feedType);\n listItem.setOnItemClick((message) => this._onMessageClick?.(message, index));\n listItem.setOnItemActionClick((message, action) => this._onMessageActionClick?.(message, action, index));\n listItem.setOnItemLongPress((message) => this._onMessageLongPress?.(message, index));\n listItem.setOnItemVisible((message) => this.openVisibleMessage(message))\n list.appendChild(listItem);\n });\n\n // Add pagination item if can paginate\n if (this._canPaginate) {\n const paginationItem = new CourierInboxPaginationListItem({\n theme: this.theme,\n customItem: this._paginationItemFactory?.({ feedType: this._feedType }),\n onPaginationTrigger: () => this._onPaginationTrigger?.(this._feedType),\n });\n list.appendChild(paginationItem);\n }\n }\n\n private async openVisibleMessage(message: InboxMessage) {\n try {\n await openMessage(message);\n } catch (error) {\n // Error ignored. Will get logged in the openMessage function\n }\n }\n\n // Factories\n public setLoadingStateFactory(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement): void {\n this._loadingStateFactory = factory;\n this.render();\n }\n\n public setEmptyStateFactory(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement): void {\n this._emptyStateFactory = factory;\n this.render();\n }\n\n public setErrorStateFactory(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement): void {\n this._errorStateFactory = factory;\n this.render();\n }\n\n public setListItemFactory(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement): void {\n this._listItemFactory = factory;\n this.render();\n }\n\n public setPaginationItemFactory(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement): void {\n this._paginationItemFactory = factory;\n this.render();\n }\n\n}\n\nregisterElement(CourierInboxList);\n","import { CourierBaseElement, CourierIcon, CourierIconSVGs, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\n\nexport class CourierInboxOptionMenuItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-option-menu-item';\n }\n\n // State\n private _option: CourierInboxMenuOption;\n private _isSelectedable: boolean;\n private _isSelected?: boolean;\n\n // Components\n private _content?: HTMLDivElement;\n private _itemIcon?: CourierIcon;\n private _title?: HTMLParagraphElement;\n private _selectionIcon?: CourierIcon;\n\n constructor(props: { option: CourierInboxMenuOption, selectable: boolean, isSelected: boolean, themeManager: CourierInboxThemeManager }) {\n super();\n this._option = props.option;\n this._isSelected = props.isSelected;\n this._isSelectedable = props.selectable;\n }\n\n onComponentMounted() {\n\n this._content = document.createElement('div');\n this._content.className = 'menu-item';\n\n this._itemIcon = new CourierIcon(this._option.icon.svg ?? CourierIconSVGs.inbox);\n this._itemIcon.setAttribute('size', '16');\n\n this._title = document.createElement('p');\n this._title.textContent = this._option.text;\n\n const spacer = document.createElement('div');\n spacer.className = 'spacer';\n\n this._selectionIcon = new CourierIcon(CourierIconSVGs.check);\n\n this._content.appendChild(this._itemIcon);\n this._content.appendChild(this._title);\n this._content.appendChild(spacer);\n\n // Add check icon if selectable\n if (this._isSelectedable) {\n this._content.appendChild(this._selectionIcon);\n }\n\n this.appendChild(this._content);\n\n this._selectionIcon.style.display = this._isSelected ? 'block' : 'none';\n\n this.refreshTheme();\n\n }\n\n public refreshTheme() {\n\n // Set selected icon color\n this._selectionIcon?.updateColor(this._option.selectionIcon?.color ?? 'red');\n this._selectionIcon?.updateSVG(this._option.selectionIcon?.svg ?? CourierIconSVGs.check);\n\n if (this._title) {\n this._title.textContent = this._option.text ?? 'Missing Text';\n }\n\n this._itemIcon?.updateColor(this._option.icon?.color ?? 'red');\n this._itemIcon?.updateSVG(this._option.icon?.svg ?? CourierIconSVGs.inbox);\n\n }\n\n}\n\nregisterElement(CourierInboxOptionMenuItem);\n","import { CourierBaseElement, CourierIconButton, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxOptionMenuItem } from \"./courier-inbox-option-menu-item\";\nimport { CourierInboxHeaderMenuItemId } from \"./courier-inbox-header\";\nimport { CourierInboxIconTheme } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxMenuOptionType = 'filters' | 'actions';\n\nexport type CourierInboxMenuOption = {\n id: CourierInboxHeaderMenuItemId;\n text: string;\n icon: CourierInboxIconTheme;\n selectionIcon?: CourierInboxIconTheme | null;\n onClick: (option: CourierInboxMenuOption) => void;\n};\n\nexport class CourierInboxOptionMenu extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-option-menu';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _type: CourierInboxMenuOptionType;\n private _selectedIndex: number = 0;\n private _options: CourierInboxMenuOption[];\n private _selectable: boolean;\n private _onMenuOpen: () => void;\n\n // Components\n private _menuButton?: CourierIconButton;\n private _menu?: HTMLDivElement;\n private _style?: HTMLStyleElement;\n\n constructor(themeManager: CourierInboxThemeManager, type: CourierInboxMenuOptionType, selectable: boolean, options: CourierInboxMenuOption[], onMenuOpen: () => void) {\n super();\n\n this._type = type;\n this._selectable = selectable;\n this._options = options;\n this._selectedIndex = 0;\n this._onMenuOpen = onMenuOpen;\n\n // Handle the theme change\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxOptionMenu.id, this.getStyles());\n\n this._menuButton = new CourierIconButton(this._type === 'filters' ? CourierIconSVGs.filter : CourierIconSVGs.overflow);\n this._menu = document.createElement('div');\n this._menu.className = `menu ${this._type}`;\n\n this.appendChild(this._menuButton);\n this.appendChild(this._menu);\n\n this._menuButton.addEventListener('click', this.toggleMenu.bind(this));\n document.addEventListener('click', this.handleOutsideClick.bind(this));\n\n this.refreshTheme();\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private getStyles(): string {\n const theme = this._themeSubscription.manager.getTheme();\n\n return `\n ${CourierInboxOptionMenu.id} {\n position: relative;\n display: inline-block;\n }\n\n ${CourierInboxOptionMenu.id} .menu {\n display: none;\n position: absolute;\n top: 42px;\n right: -6px;\n border-radius: ${theme.inbox?.header?.menus?.popup?.borderRadius ?? '6px'};\n border: ${theme.inbox?.header?.menus?.popup?.border ?? '1px solid red'};\n background: ${theme.inbox?.header?.menus?.popup?.backgroundColor ?? 'red'};\n box-shadow: ${theme.inbox?.header?.menus?.popup?.shadow ?? '0 4px 12px 0 red'};\n z-index: 1000;\n min-width: 200px;\n overflow: hidden;\n padding: 4px 0;\n }\n\n ${CourierInboxOptionMenu.id} courier-inbox-filter-menu-item {\n border-bottom: ${theme.inbox?.header?.menus?.popup?.list?.divider ?? 'none'};\n }\n\n ${CourierInboxOptionMenu.id} courier-inbox-filter-menu-item:last-child {\n border-bottom: none;\n }\n\n ${CourierInboxOptionMenuItem.id} {\n display: flex;\n flex-direction: row;\n padding: 6px 12px;\n cursor: pointer;\n }\n\n ${CourierInboxOptionMenuItem.id}:hover {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.hoverBackgroundColor ?? 'red'};\n }\n\n ${CourierInboxOptionMenuItem.id}:active {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.activeBackgroundColor ?? 'red'};\n }\n\n ${CourierInboxOptionMenuItem.id} .menu-item {\n display: flex;\n align-items: center;\n width: 100%;\n gap: 12px;\n }\n\n ${CourierInboxOptionMenuItem.id} .spacer {\n flex: 1;\n }\n\n ${CourierInboxOptionMenuItem.id} p {\n margin: 0;\n font-family: ${theme.inbox?.header?.menus?.popup?.list?.font?.family ?? 'inherit'};\n font-weight: ${theme.inbox?.header?.menus?.popup?.list?.font?.weight ?? 'inherit'};\n font-size: ${theme.inbox?.header?.menus?.popup?.list?.font?.size ?? '14px'};\n color: ${theme.inbox?.header?.menus?.popup?.list?.font?.color ?? 'red'};\n white-space: nowrap;\n }\n\n ${CourierInboxOptionMenuItem.id} .check-icon {\n display: none;\n }\n `;\n }\n\n private refreshTheme() {\n // Update styles\n if (this._style) {\n this._style.textContent = this.getStyles();\n }\n\n // Get theme\n const theme = this._themeSubscription.manager.getTheme();\n\n // Get menu\n const menu = theme.inbox?.header?.menus;\n const isFilter = this._type === 'filters';\n const buttonConfig = isFilter ? menu?.filters?.button : menu?.actions?.button;\n const defaultIcon = isFilter ? CourierIconSVGs.filter : CourierIconSVGs.overflow;\n\n this._menuButton?.updateIconSVG(buttonConfig?.icon?.svg ?? defaultIcon);\n this._menuButton?.updateIconColor(buttonConfig?.icon?.color ?? 'red');\n this._menuButton?.updateBackgroundColor(buttonConfig?.backgroundColor ?? 'transparent');\n this._menuButton?.updateHoverBackgroundColor(buttonConfig?.hoverBackgroundColor ?? 'red');\n this._menuButton?.updateActiveBackgroundColor(buttonConfig?.activeBackgroundColor ?? 'red');\n\n // Reload menu items\n this.refreshMenuItems();\n }\n\n public setOptions(options: CourierInboxMenuOption[]) {\n this._options = options;\n this.refreshMenuItems();\n }\n\n private refreshMenuItems() {\n if (this._menu) {\n this._menu.innerHTML = '';\n }\n\n this._options.forEach((option, index) => {\n const menuItem = new CourierInboxOptionMenuItem({\n option: option,\n selectable: this._selectable,\n isSelected: this._selectedIndex === index,\n themeManager: this._themeSubscription.manager\n });\n\n menuItem.addEventListener('click', () => {\n this._selectedIndex = index;\n option.onClick(option);\n this.refreshMenuItems();\n this.closeMenu();\n });\n\n this._menu?.appendChild(menuItem);\n });\n }\n\n private toggleMenu(event: Event) {\n event.stopPropagation();\n const isOpening = this._menu?.style.display !== 'block';\n if (this._menu) {\n this._menu.style.display = isOpening ? 'block' : 'none';\n }\n\n if (isOpening) {\n this._onMenuOpen();\n }\n }\n\n private handleOutsideClick(event: MouseEvent) {\n if (!this.contains(event.target as Node)) {\n this.closeMenu();\n }\n }\n\n public closeMenu() {\n if (this._menu) {\n this._menu.style.display = 'none';\n }\n }\n\n public selectOption(option: CourierInboxMenuOption) {\n this._selectedIndex = this._options.findIndex(o => o.id === option.id);\n this.refreshMenuItems();\n }\n\n}\n\nregisterElement(CourierInboxOptionMenu);\n","import { CourierBaseElement, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\n\nexport type CourierUnreadCountLocation = 'button' | 'header';\n\nexport class CourierUnreadCountBadge extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-unread-count-badge';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _location: CourierUnreadCountLocation;\n private _count: number = 0;\n\n // Elements\n private _badge?: HTMLElement;\n private _style?: HTMLStyleElement;\n\n get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(props: { themeBus: CourierInboxThemeManager, location: CourierUnreadCountLocation }) {\n super();\n this._location = props.location;\n this._themeSubscription = props.themeBus.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme(this._location);\n });\n }\n\n onComponentMounted() {\n\n // Create badge element\n this._badge = document.createElement('span');\n this._badge.className = `unread-badge ${this._location}`;\n\n this.appendChild(this._badge);\n this.updateBadge();\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n return `\n ${CourierUnreadCountBadge.id} {\n display: inline-block;\n }\n\n ${CourierUnreadCountBadge.id} .unread-badge {\n padding: 3px 8px;\n font-size: 12px;\n text-align: center;\n display: none;\n pointer-events: none;\n }\n\n ${CourierUnreadCountBadge.id} .header {\n background-color: ${theme.inbox?.header?.filters?.unreadIndicator?.backgroundColor};\n color: ${theme.inbox?.header?.filters?.unreadIndicator?.font?.color};\n border-radius: ${theme.inbox?.header?.filters?.unreadIndicator?.borderRadius};\n font-size: ${theme.inbox?.header?.filters?.unreadIndicator?.font?.size};\n padding: ${theme.inbox?.header?.filters?.unreadIndicator?.padding};\n }\n `\n }\n\n public setCount(count: number) {\n this._count = count;\n this.updateBadge();\n }\n\n public refreshTheme(location: CourierUnreadCountLocation) {\n this._location = location;\n this.updateBadge();\n }\n\n private updateBadge() {\n if (this._badge) {\n if (this._count > 0) {\n this._badge.textContent = this._count > 99 ? '99+' : this._count.toString();\n this._badge.style.display = 'block';\n } else {\n this._badge.style.display = 'none';\n }\n }\n }\n}\n\nregisterElement(CourierUnreadCountBadge);\n","import { CourierBaseElement, CourierIcon, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\nimport { CourierUnreadCountBadge } from \"./courier-unread-count-badge\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxHeaderTitle extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-header-title';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _option: CourierInboxMenuOption;\n private _feedType?: CourierInboxFeedType;\n\n // Components\n private _style?: HTMLStyleElement;\n private _titleElement?: HTMLHeadingElement;\n private _iconElement?: CourierIcon;\n private _unreadBadge?: CourierUnreadCountBadge;\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(themeManager: CourierInboxThemeManager, option: CourierInboxMenuOption) {\n super();\n\n this._option = option;\n\n // Subscribe to the theme bus\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme(this._feedType ?? 'inbox');\n });\n\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxHeaderTitle.id} {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n }\n\n ${CourierInboxHeaderTitle.id} courier-icon {\n display: flex;\n align-items: center;\n }\n\n ${CourierInboxHeaderTitle.id} h2 {\n margin: 0;\n font-family: ${theme.inbox?.header?.filters?.font?.family ?? 'inherit'};\n font-size: ${theme.inbox?.header?.filters?.font?.size ?? '18px'};\n font-weight: ${theme.inbox?.header?.filters?.font?.weight ?? '500'};\n color: ${theme.inbox?.header?.filters?.font?.color ?? 'red'};\n }\n\n ${CourierInboxHeaderTitle.id} courier-unread-count-badge {\n margin-left: 4px;\n }\n `;\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxHeaderTitle.id, CourierInboxHeaderTitle.getStyles(this.theme));\n\n this._iconElement = new CourierIcon(undefined, this._option.icon.svg);\n this._titleElement = document.createElement('h2');\n this._unreadBadge = new CourierUnreadCountBadge({\n themeBus: this._themeSubscription.manager,\n location: 'header'\n });\n\n this.appendChild(this._iconElement);\n this.appendChild(this._titleElement);\n this.appendChild(this._unreadBadge);\n\n this.refreshTheme(this._feedType ?? 'inbox');\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private refreshTheme(feedType: CourierInboxFeedType) {\n this._feedType = feedType;\n if (this._style) {\n this._style.textContent = CourierInboxHeaderTitle.getStyles(this.theme);\n }\n this._unreadBadge?.refreshTheme('header');\n this.updateFilter();\n }\n\n public updateSelectedOption(option: CourierInboxMenuOption, feedType: CourierInboxFeedType, unreadCount: number) {\n this._option = option;\n this._feedType = feedType;\n this._unreadBadge?.setCount(unreadCount);\n this.updateFilter();\n }\n\n private updateFilter() {\n const theme = this._themeSubscription.manager.getTheme();\n switch (this._feedType) {\n case 'inbox':\n if (this._titleElement) {\n this._titleElement.textContent = theme.inbox?.header?.filters?.inbox?.text ?? 'Inbox';\n }\n this._iconElement?.updateSVG(theme.inbox?.header?.filters?.inbox?.icon?.svg ?? CourierIconSVGs.inbox);\n this._iconElement?.updateColor(theme.inbox?.header?.filters?.inbox?.icon?.color ?? 'red');\n break;\n case 'archive':\n if (this._titleElement) {\n this._titleElement.textContent = theme.inbox?.header?.filters?.archive?.text ?? 'Archive';\n }\n this._iconElement?.updateSVG(theme.inbox?.header?.filters?.archive?.icon?.svg ?? CourierIconSVGs.archive);\n this._iconElement?.updateColor(theme.inbox?.header?.filters?.archive?.icon?.color ?? 'red');\n break;\n }\n }\n}\n\nregisterElement(CourierInboxHeaderTitle);","import { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierIconSVGs, CourierFactoryElement, registerElement, CourierColors, injectGlobalStyle } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxOptionMenu, CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\nimport { CourierInboxHeaderTitle } from \"./courier-inbox-header-title\";\nimport { CourierInboxHeaderFactoryProps } from \"../types/factories\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxHeaderMenuItemId = CourierInboxFeedType | 'markAllRead' | 'archiveAll' | 'archiveRead';\n\nexport class CourierInboxHeader extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-header';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _feedType: CourierInboxFeedType = 'inbox';\n private _unreadCount: number = 0;\n\n // Components\n private _titleSection?: CourierInboxHeaderTitle;\n private _filterMenu?: CourierInboxOptionMenu;\n private _actionMenu?: CourierInboxOptionMenu;\n private _style?: HTMLStyleElement;\n\n // Callbacks\n private _onFeedTypeChange: (feedType: CourierInboxFeedType) => void;\n\n static get observedAttributes() {\n return ['icon', 'title', 'feed-type'];\n }\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(props: { themeManager: CourierInboxThemeManager, onFeedTypeChange: (feedType: CourierInboxFeedType) => void }) {\n super();\n\n // Subscribe to the theme bus\n this._themeSubscription = props.themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Set the on feed type change callback\n this._onFeedTypeChange = props.onFeedTypeChange;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxHeader.id, CourierInboxHeader.getStyles(this.theme));\n }\n\n onComponentUmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private getFilterOptions(): CourierInboxMenuOption[] {\n const theme = this._themeSubscription.manager.getTheme();\n const filterMenu = theme.inbox?.header?.menus?.filters;\n\n return [\n {\n id: 'inbox',\n text: filterMenu?.inbox?.text ?? 'Inbox',\n icon: {\n color: filterMenu?.inbox?.icon?.color ?? 'red',\n svg: filterMenu?.inbox?.icon?.svg ?? CourierIconSVGs.inbox\n },\n selectionIcon: {\n color: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.color ?? 'red',\n svg: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.svg ?? CourierIconSVGs.check\n },\n onClick: (option: CourierInboxMenuOption) => {\n this.handleOptionMenuItemClick('inbox', option);\n }\n },\n {\n id: 'archive',\n text: filterMenu?.archive?.text ?? 'Archive',\n icon: {\n color: filterMenu?.archive?.icon?.color ?? 'red',\n svg: filterMenu?.archive?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: {\n color: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.color ?? 'red',\n svg: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.svg ?? CourierIconSVGs.check\n },\n onClick: (option: CourierInboxMenuOption) => {\n this.handleOptionMenuItemClick('archive', option);\n }\n }\n ];\n }\n\n private getActionOptions(): CourierInboxMenuOption[] {\n const theme = this._themeSubscription.manager.getTheme();\n const actionMenu = theme.inbox?.header?.menus?.actions;\n\n return [\n {\n id: 'markAllRead',\n text: actionMenu?.markAllRead?.text ?? 'Mark All as Read',\n icon: {\n color: actionMenu?.markAllRead?.icon?.color ?? 'red',\n svg: actionMenu?.markAllRead?.icon?.svg ?? CourierIconSVGs.inbox\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.readAllMessages({ canCallApi: true });\n }\n },\n {\n id: 'archiveAll',\n text: actionMenu?.archiveAll?.text ?? 'Archive All',\n icon: {\n color: actionMenu?.archiveAll?.icon?.color ?? 'red',\n svg: actionMenu?.archiveAll?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.archiveAllMessages({ canCallApi: true });\n }\n },\n {\n id: 'archiveRead',\n text: actionMenu?.archiveRead?.text ?? 'Archive Read',\n icon: {\n color: actionMenu?.archiveRead?.icon?.color ?? 'red',\n svg: actionMenu?.archiveRead?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.archiveReadMessages({ canCallApi: true });\n }\n }\n ];\n }\n\n private refreshTheme() {\n\n if (this._style) {\n this._style.textContent = CourierInboxHeader.getStyles(this.theme);\n }\n\n // Update menus\n this._filterMenu?.setOptions(this.getFilterOptions());\n this._actionMenu?.setOptions(this.getActionOptions());\n }\n\n private handleOptionMenuItemClick(feedType: CourierInboxFeedType, option: CourierInboxMenuOption) {\n this._feedType = feedType;\n if (this._titleSection) {\n this._titleSection.updateSelectedOption(option, this._feedType, this._feedType === 'inbox' ? this._unreadCount : 0);\n }\n this._onFeedTypeChange(feedType);\n }\n\n public render(props: CourierInboxHeaderFactoryProps): void {\n this._feedType = props.feedType;\n this._unreadCount = props.unreadCount;\n const option = this.getFilterOptions().find(opt => ['inbox', 'archive'].includes(opt.id) && opt.id === this._feedType);\n if (option) {\n this._titleSection?.updateSelectedOption(option, this._feedType, this._feedType === 'inbox' ? this._unreadCount : 0);\n this._filterMenu?.selectOption(option);\n }\n }\n\n build(newElement: HTMLElement | undefined | null) {\n super.build(newElement);\n this.refreshTheme();\n }\n\n defaultElement(): HTMLElement {\n const filterOptions = this.getFilterOptions();\n\n this._titleSection = new CourierInboxHeaderTitle(this._themeSubscription.manager, filterOptions[0]);\n this._filterMenu = new CourierInboxOptionMenu(this._themeSubscription.manager, 'filters', true, filterOptions, () => {\n this._actionMenu?.closeMenu();\n });\n this._actionMenu = new CourierInboxOptionMenu(this._themeSubscription.manager, 'actions', false, this.getActionOptions(), () => {\n this._filterMenu?.closeMenu();\n });\n\n // Selected default menu\n this._filterMenu.selectOption(filterOptions[0]);\n\n // Create flexible spacer\n const spacer = document.createElement('div');\n spacer.className = 'spacer';\n\n // Create and setup actions section\n const actions = document.createElement('div');\n actions.className = 'actions';\n actions.appendChild(this._filterMenu);\n actions.appendChild(this._actionMenu);\n\n const headerContent = document.createElement('div');\n headerContent.className = 'header-content';\n headerContent.appendChild(this._titleSection);\n headerContent.appendChild(spacer);\n headerContent.appendChild(actions);\n\n return headerContent;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxHeader.id} {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n ${CourierInboxHeader.id} .header-content {\n padding: 10px 10px 10px 16px;\n background-color: ${theme.inbox?.header?.backgroundColor ?? CourierColors.white[500]};\n box-shadow: ${theme.inbox?.header?.shadow ?? `0px 1px 0px 0px red`};\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 1;\n z-index: 100;\n }\n\n ${CourierInboxHeader.id} .spacer {\n flex: 1;\n }\n\n ${CourierInboxHeader.id} .actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n `;\n }\n\n}\n\nregisterElement(CourierInboxHeader);\n","import { CourierInboxDatastore } from \"./datastore\";\nimport { CourierInboxDatastoreEvents } from \"./datatore-events\";\n\nexport class CourierInboxDataStoreListener {\n readonly events: CourierInboxDatastoreEvents;\n\n constructor(events: CourierInboxDatastoreEvents) {\n this.events = events;\n }\n\n remove() {\n CourierInboxDatastore.shared.removeDataStoreListener(this);\n }\n\n}\n","import { CourierColors, CourierIconSVGs, SystemThemeMode, CourierFontTheme, CourierIconTheme, CourierButtonTheme, CourierIconButtonTheme } from \"@trycourier/courier-ui-core\";\n\n// Re-export common types from core for convenience\nexport type CourierInboxFontTheme = CourierFontTheme;\nexport type CourierInboxIconTheme = CourierIconTheme;\nexport type CourierInboxButtonTheme = CourierButtonTheme;\nexport type CourierInboxIconButtonTheme = CourierIconButtonTheme;\n\nexport type CourierInboxFilterItemTheme = {\n icon?: CourierInboxIconTheme;\n text?: string;\n}\n\nexport type CourierInboxUnreadDotIndicatorTheme = {\n backgroundColor?: string;\n borderRadius?: string;\n height?: string;\n width?: string;\n}\n\nexport type CourierInboxUnreadCountIndicatorTheme = {\n font?: CourierInboxFontTheme;\n backgroundColor?: string;\n borderRadius?: string;\n padding?: string;\n}\n\nexport type CourierInboxMenuButtonTheme = CourierInboxIconButtonTheme & {\n unreadDotIndicator?: CourierInboxUnreadDotIndicatorTheme;\n}\n\nexport type CourierInboxPopupTheme = {\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n list?: {\n font?: CourierInboxFontTheme;\n selectionIcon?: CourierInboxIconTheme;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n divider?: string;\n };\n}\n\nexport type CourierInboxListItemTheme = {\n unreadIndicatorColor?: string;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n title?: CourierInboxFontTheme;\n subtitle?: CourierInboxFontTheme;\n time?: CourierInboxFontTheme;\n archiveIcon?: CourierInboxIconTheme;\n divider?: string;\n actions?: {\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n font?: CourierInboxFontTheme;\n }\n menu?: {\n enabled?: boolean;\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n longPress?: {\n displayDuration?: number;\n vibrationDuration?: number;\n };\n item?: {\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n borderRadius?: string;\n read?: CourierInboxIconTheme;\n unread?: CourierInboxIconTheme;\n archive?: CourierInboxIconTheme;\n unarchive?: CourierInboxIconTheme;\n };\n };\n}\n\nexport type CourierInboxSkeletonLoadingStateTheme = {\n animation?: {\n barColor?: string;\n barHeight?: string;\n barBorderRadius?: string;\n duration?: string;\n },\n divider?: string;\n}\n\nexport type CourierInboxInfoStateTheme = {\n title?: {\n font?: CourierInboxFontTheme;\n text?: string;\n },\n button?: CourierInboxButtonTheme;\n}\n\nexport type CourierMenuItemTheme = {\n icon?: CourierInboxIconTheme;\n text?: string;\n}\n\nexport type CourierFilterMenuTheme = {\n button?: CourierInboxIconButtonTheme;\n inbox?: CourierMenuItemTheme;\n archive?: CourierMenuItemTheme;\n}\n\nexport type CourierActionMenuTheme = {\n button?: CourierInboxIconButtonTheme;\n markAllRead?: CourierMenuItemTheme;\n archiveAll?: CourierMenuItemTheme;\n archiveRead?: CourierMenuItemTheme;\n}\n\nexport type CourierInboxTheme = {\n popup?: {\n button?: CourierInboxMenuButtonTheme;\n window?: {\n backgroundColor?: string;\n borderRadius?: string;\n border?: string;\n shadow?: string;\n };\n }\n inbox?: {\n header?: {\n backgroundColor?: string;\n shadow?: string;\n filters?: {\n font?: CourierInboxFontTheme;\n inbox?: CourierInboxFilterItemTheme;\n archive?: CourierInboxFilterItemTheme;\n unreadIndicator?: CourierInboxUnreadCountIndicatorTheme;\n }\n menus?: {\n popup?: CourierInboxPopupTheme;\n filters?: CourierFilterMenuTheme;\n actions?: CourierActionMenuTheme;\n }\n }\n list?: {\n backgroundColor?: string;\n item?: CourierInboxListItemTheme;\n },\n loading?: CourierInboxSkeletonLoadingStateTheme,\n empty?: CourierInboxInfoStateTheme,\n error?: CourierInboxInfoStateTheme\n }\n};\n\nexport const defaultLightTheme: CourierInboxTheme = {\n popup: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n unreadDotIndicator: {\n backgroundColor: CourierColors.blue[500],\n borderRadius: '50%',\n height: '8px',\n width: '8px',\n }\n },\n window: {\n backgroundColor: CourierColors.white[500],\n borderRadius: '8px',\n border: `1px solid ${CourierColors.gray[500]}`,\n shadow: `0px 8px 16px -4px ${CourierColors.gray[500]}`\n }\n },\n inbox: {\n header: {\n backgroundColor: CourierColors.white[500],\n shadow: `0px 1px 0px 0px ${CourierColors.gray[500]}`,\n filters: {\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '18px'\n },\n inbox: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n },\n unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '12px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '4px',\n padding: '2px 6px',\n }\n },\n menus: {\n popup: {\n backgroundColor: CourierColors.white[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: `0px 4px 8px -2px ${CourierColors.gray[500]}`,\n list: {\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n divider: `none`,\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n },\n selectionIcon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.check\n }\n }\n },\n filters: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.filter\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n },\n inbox: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n }\n },\n actions: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.overflow\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n },\n markAllRead: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.read\n },\n text: 'Read All'\n },\n archiveAll: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive All'\n },\n archiveRead: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archiveRead\n },\n text: 'Archive Read'\n }\n },\n }\n },\n list: {\n backgroundColor: CourierColors.white[500],\n item: {\n backgroundColor: 'transparent',\n unreadIndicatorColor: CourierColors.blue[500],\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n actions: {\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: '0px 1px 2px 0px rgba(0, 0, 0, 0.06)',\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n }\n },\n title: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n },\n subtitle: {\n color: CourierColors.gray[600],\n family: undefined,\n size: '14px'\n },\n time: {\n color: CourierColors.gray[600],\n family: undefined,\n size: '14px'\n },\n divider: `1px solid ${CourierColors.gray[200]}`,\n menu: {\n enabled: true,\n backgroundColor: CourierColors.white[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: `0px 2px 4px -2px ${CourierColors.gray[500]}`,\n longPress: {\n displayDuration: 4000,\n vibrationDuration: 50\n },\n item: {\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n borderRadius: '0px',\n read: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.read\n },\n unread: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.unread\n },\n archive: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n unarchive: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.unarchive\n }\n }\n }\n }\n },\n loading: {\n animation: {\n barColor: CourierColors.gray[500],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[200]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.black[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.black[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\nexport const defaultDarkTheme: CourierInboxTheme = {\n popup: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n unreadDotIndicator: {\n backgroundColor: CourierColors.blue[500],\n borderRadius: '50%',\n height: '8px',\n width: '8px',\n }\n },\n window: {\n backgroundColor: CourierColors.black[500],\n borderRadius: '8px',\n border: `1px solid ${CourierColors.gray[400]}`,\n shadow: `0px 4px 8px -2px ${CourierColors.white[500_20]}`\n }\n },\n inbox: {\n header: {\n backgroundColor: CourierColors.black[500],\n shadow: `0px 1px 0px 0px ${CourierColors.gray[400]}`,\n filters: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '18px'\n },\n inbox: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n },\n unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '12px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '4px',\n padding: '3px 8px',\n }\n },\n menus: {\n popup: {\n backgroundColor: CourierColors.black[500],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 4px 8px -2px ${CourierColors.white[500_20]}`,\n list: {\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n divider: `none`,\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n },\n selectionIcon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.check\n }\n }\n },\n filters: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.filter\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n },\n inbox: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n }\n },\n actions: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.overflow\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n },\n markAllRead: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.read\n },\n text: 'Read All'\n },\n archiveAll: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive All'\n },\n archiveRead: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archiveRead\n },\n text: 'Archive Read'\n }\n },\n }\n },\n list: {\n backgroundColor: CourierColors.black[500],\n item: {\n backgroundColor: 'transparent',\n unreadIndicatorColor: CourierColors.blue[500],\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n actions: {\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 1px 2px 0px ${CourierColors.white[500_10]}`,\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n }\n },\n title: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n },\n subtitle: {\n color: CourierColors.gray[500],\n family: undefined,\n size: '14px'\n },\n time: {\n color: CourierColors.gray[500],\n family: undefined,\n size: '12px'\n },\n divider: `1px solid ${CourierColors.gray[400]}`,\n menu: {\n enabled: true,\n backgroundColor: CourierColors.black[500],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 2px 4px -2px ${CourierColors.white[500_20]}`,\n longPress: {\n displayDuration: 4000,\n vibrationDuration: 50\n },\n item: {\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n borderRadius: '0px',\n read: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.read\n },\n unread: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.unread\n },\n archive: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n unarchive: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.unarchive\n }\n }\n }\n }\n },\n loading: {\n animation: {\n barColor: CourierColors.gray[400],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[400]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\n// Deep merge the themes, only overwriting non-optional properties\nexport const mergeTheme = (mode: SystemThemeMode, theme: CourierInboxTheme): CourierInboxTheme => {\n const defaultTheme = mode === 'light' ? defaultLightTheme : defaultDarkTheme;\n return {\n popup: {\n button: {\n ...defaultTheme.popup?.button,\n ...theme.popup?.button,\n icon: {\n ...defaultTheme.popup?.button?.icon,\n ...theme.popup?.button?.icon\n },\n unreadDotIndicator: {\n ...defaultTheme.popup?.button?.unreadDotIndicator,\n ...theme.popup?.button?.unreadDotIndicator\n }\n },\n window: {\n ...defaultTheme.popup?.window,\n ...theme.popup?.window\n }\n },\n inbox: {\n header: {\n ...defaultTheme.inbox?.header,\n ...theme.inbox?.header,\n filters: {\n ...defaultTheme.inbox?.header?.filters,\n ...theme.inbox?.header?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.filters?.inbox,\n ...theme.inbox?.header?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.inbox?.icon,\n ...theme.inbox?.header?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.filters?.archive,\n ...theme.inbox?.header?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.archive?.icon,\n ...theme.inbox?.header?.filters?.archive?.icon\n }\n },\n unreadIndicator: {\n ...defaultTheme.inbox?.header?.filters?.unreadIndicator,\n ...theme.inbox?.header?.filters?.unreadIndicator\n }\n },\n menus: {\n ...defaultTheme.inbox?.header?.menus,\n ...theme.inbox?.header?.menus,\n popup: {\n ...defaultTheme.inbox?.header?.menus?.popup,\n ...theme.inbox?.header?.menus?.popup,\n list: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list,\n ...theme.inbox?.header?.menus?.popup?.list,\n font: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.font,\n ...theme.inbox?.header?.menus?.popup?.list?.font\n },\n selectionIcon: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.selectionIcon,\n ...theme.inbox?.header?.menus?.popup?.list?.selectionIcon\n }\n }\n },\n filters: {\n ...defaultTheme.inbox?.header?.menus?.filters,\n ...theme.inbox?.header?.menus?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox,\n ...theme.inbox?.header?.menus?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox?.icon,\n ...theme.inbox?.header?.menus?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive,\n ...theme.inbox?.header?.menus?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive?.icon,\n ...theme.inbox?.header?.menus?.filters?.archive?.icon\n }\n }\n },\n actions: {\n ...defaultTheme.inbox?.header?.menus?.actions,\n ...theme.inbox?.header?.menus?.actions,\n markAllRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead,\n ...theme.inbox?.header?.menus?.actions?.markAllRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.markAllRead?.icon\n }\n },\n archiveAll: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll,\n ...theme.inbox?.header?.menus?.actions?.archiveAll,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveAll?.icon\n }\n },\n archiveRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead,\n ...theme.inbox?.header?.menus?.actions?.archiveRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveRead?.icon\n }\n }\n }\n }\n },\n list: {\n ...defaultTheme.inbox?.list,\n ...theme.inbox?.list,\n item: {\n ...defaultTheme.inbox?.list?.item,\n ...theme.inbox?.list?.item,\n menu: {\n ...defaultTheme.inbox?.list?.item?.menu,\n ...theme.inbox?.list?.item?.menu,\n item: {\n ...defaultTheme.inbox?.list?.item?.menu?.item,\n ...theme.inbox?.list?.item?.menu?.item,\n read: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.read,\n ...theme.inbox?.list?.item?.menu?.item?.read\n },\n unread: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unread,\n ...theme.inbox?.list?.item?.menu?.item?.unread\n },\n archive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.archive,\n ...theme.inbox?.list?.item?.menu?.item?.archive\n },\n unarchive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unarchive,\n ...theme.inbox?.list?.item?.menu?.item?.unarchive\n }\n }\n }\n }\n },\n loading: {\n ...defaultTheme.inbox?.loading,\n ...theme.inbox?.loading,\n },\n empty: {\n ...defaultTheme.inbox?.empty,\n ...theme.inbox?.empty\n },\n error: {\n ...defaultTheme.inbox?.error,\n ...theme.inbox?.error\n }\n }\n };\n};\n","import { CourierThemeManager, CourierThemeSubscription, SystemThemeMode } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme, defaultDarkTheme, defaultLightTheme, mergeTheme } from \"./courier-inbox-theme\";\n\nexport interface CourierInboxThemeSubscription extends CourierThemeSubscription<CourierInboxTheme> {\n manager: CourierInboxThemeManager;\n}\n\n/**\n * Inbox-specific theme manager that extends the abstract CourierThemeManager.\n * Provides inbox theme management with light/dark mode support.\n */\nexport class CourierInboxThemeManager extends CourierThemeManager<CourierInboxTheme> {\n\n // Event ID for inbox theme changes\n protected readonly THEME_CHANGE_EVENT: string = 'courier_inbox_theme_change';\n\n constructor(initialTheme: CourierInboxTheme) {\n super(initialTheme);\n }\n\n /**\n * Get the default light theme for inbox\n */\n protected getDefaultLightTheme(): CourierInboxTheme {\n return defaultLightTheme;\n }\n\n /**\n * Get the default dark theme for inbox\n */\n protected getDefaultDarkTheme(): CourierInboxTheme {\n return defaultDarkTheme;\n }\n\n /**\n * Merge the inbox theme with defaults\n */\n protected mergeTheme(mode: SystemThemeMode, theme: CourierInboxTheme): CourierInboxTheme {\n return mergeTheme(mode, theme);\n }\n\n /**\n * Subscribe to inbox theme changes\n * @param callback - Function to run when the theme changes\n * @returns Object with unsubscribe method to stop listening\n */\n public subscribe(callback: (theme: CourierInboxTheme) => void): CourierInboxThemeSubscription {\n const baseSubscription = super.subscribe(callback);\n return {\n ...baseSubscription,\n manager: this\n };\n }\n\n}\n","import { AuthenticationListener, Courier, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierInboxList } from \"./courier-inbox-list\";\nimport { CourierInboxHeader } from \"./courier-inbox-header\";\nimport { CourierBaseElement, CourierComponentThemeMode, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { CourierInboxDataStoreListener } from \"../datastore/datastore-listener\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxHeaderFactoryProps, CourierInboxListItemActionFactoryProps, CourierInboxListItemFactoryProps, CourierInboxPaginationItemFactoryProps, CourierInboxStateEmptyFactoryProps, CourierInboxStateErrorFactoryProps, CourierInboxStateLoadingFactoryProps } from \"../types/factories\";\nimport { CourierInboxTheme, defaultLightTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\nimport { CourierUnreadCountBadge } from \"./courier-unread-count-badge\";\n\nexport class CourierInbox extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox';\n }\n\n // State\n private _currentFeed: CourierInboxFeedType = 'inbox';\n\n /** Returns the current feed type. */\n get currentFeed(): CourierInboxFeedType {\n return this._currentFeed;\n }\n\n // Theming\n // Theme manager instance for handling theming logic\n private _themeManager: CourierInboxThemeManager;\n\n /** Returns the current theme object. */\n get theme() {\n return this._themeManager.getTheme();\n }\n\n /**\n * Set the light theme for the inbox.\n * @param theme The light theme object to set.\n */\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n /**\n * Set the dark theme for the inbox.\n * @param theme The dark theme object to set.\n */\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n /**\n * Set the theme mode (light/dark/system).\n * @param mode The theme mode to set.\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._themeManager.setMode(mode);\n }\n\n // Components\n private _inboxStyle?: HTMLStyleElement;\n private _unreadIndicatorStyle?: HTMLStyleElement;\n private _list?: CourierInboxList;\n private _datastoreListener: CourierInboxDataStoreListener | undefined;\n private _authListener: AuthenticationListener | undefined;\n\n // Header\n private _header?: CourierInboxHeader;\n private _headerFactory: ((props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) | undefined | null = undefined;\n\n // List\n private _onMessageClick?: (props: CourierInboxListItemFactoryProps) => void;\n private _onMessageActionClick?: (props: CourierInboxListItemActionFactoryProps) => void;\n private _onMessageLongPress?: (props: CourierInboxListItemFactoryProps) => void;\n\n // Default props\n private _defaultProps = {\n title: 'Inbox',\n icon: CourierIconSVGs.inbox,\n feedType: this._currentFeed,\n height: 'auto'\n };\n\n static get observedAttributes() {\n return ['height', 'light-theme', 'dark-theme', 'mode', 'message-click', 'message-action-click', 'message-long-press'];\n }\n\n constructor(themeManager?: CourierInboxThemeManager) {\n super();\n this._themeManager = themeManager ?? new CourierInboxThemeManager(defaultLightTheme);\n }\n\n onComponentMounted() {\n\n // Inject style\n this._inboxStyle = injectGlobalStyle(CourierInbox.id, this.getStyles());\n this._unreadIndicatorStyle = injectGlobalStyle(CourierUnreadCountBadge.id, CourierUnreadCountBadge.getStyles(this.theme));\n\n // Header\n this._header = new CourierInboxHeader({\n themeManager: this._themeManager,\n onFeedTypeChange: (feedType: CourierInboxFeedType) => {\n this.setFeedType(feedType);\n }\n });\n this._header.build(undefined);\n this.appendChild(this._header);\n\n // Create list and ensure it's properly initialized\n this._list = new CourierInboxList({\n themeManager: this._themeManager,\n canClickListItems: false,\n canLongPressListItems: false,\n onRefresh: () => {\n this.refresh();\n },\n onPaginationTrigger: async (feedType: CourierInboxFeedType) => {\n try {\n await CourierInboxDatastore.shared.fetchNextPageOfMessages({\n feedType: feedType\n });\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to fetch next page of messages:', error);\n }\n },\n onMessageClick: (message, index) => {\n CourierInboxDatastore.shared.clickMessage({ message });\n\n this.dispatchEvent(new CustomEvent('message-click', {\n detail: { message, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageClick?.({ message, index });\n },\n onMessageActionClick: (message, action, index) => {\n\n // TODO: Track action click?\n\n this.dispatchEvent(new CustomEvent('message-action-click', {\n detail: { message, action, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageActionClick?.({ message, action, index });\n },\n onMessageLongPress: (message, index) => {\n this.dispatchEvent(new CustomEvent('message-long-press', {\n detail: { message, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageLongPress?.({ message, index });\n }\n });\n\n this.refreshTheme();\n\n this.appendChild(this._list);\n\n // Attach the datastore listener\n this._datastoreListener = new CourierInboxDataStoreListener({\n onError: (error: Error) => {\n this._list?.setError(error);\n },\n onDataSetChange: (dataSet: InboxDataSet, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.setDataSet(dataSet);\n this.updateHeader();\n }\n },\n onPageAdded: (dataSet: InboxDataSet, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.addPage(dataSet);\n this.updateHeader();\n }\n },\n onMessageAdd: (message: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.addMessage(message, index);\n this.updateHeader();\n }\n },\n onMessageRemove: (_: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.removeMessage(index);\n this.updateHeader();\n }\n },\n onMessageUpdate: (message: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.updateMessage(message, index);\n this.updateHeader();\n }\n },\n onUnreadCountChange: (_: number) => {\n this.updateHeader();\n }\n });\n\n CourierInboxDatastore.shared.addDataStoreListener(this._datastoreListener);\n\n // Refresh the theme on change\n this._themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Listen for authentication state changes\n this._authListener = Courier.shared.addAuthenticationListener(async ({ userId }) => {\n if (userId) {\n await this.refresh();\n }\n });\n\n // Refresh the inbox if the user is already signed in\n if (!Courier.shared.client?.options.userId) {\n Courier.shared.client?.options.logger.error('No user signed in. Please call Courier.shared.signIn(...) to load the inbox.')\n return;\n }\n\n this.refresh();\n\n }\n\n onComponentUnmounted() {\n this._themeManager.cleanup();\n this._datastoreListener?.remove();\n this._authListener?.remove();\n this._inboxStyle?.remove();\n this._unreadIndicatorStyle?.remove();\n }\n\n private refreshTheme() {\n this._list?.refreshInfoStateThemes();\n if (this._inboxStyle) {\n this._inboxStyle.textContent = this.getStyles();\n }\n if (this._unreadIndicatorStyle) {\n this._unreadIndicatorStyle.textContent = CourierUnreadCountBadge.getStyles(this.theme);\n }\n }\n\n private getStyles(): string {\n return `\n ${CourierInbox.id} {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: ${this._defaultProps.height};\n }\n\n ${CourierInbox.id} courier-inbox-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n }\n `;\n }\n\n /**\n * Sets a custom header factory for the inbox.\n * @param factory - A function that returns an HTMLElement to render as the header.\n */\n public setHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._headerFactory = factory;\n this.updateHeader();\n }\n\n /**\n * Removes the custom header factory from the inbox, reverting to the default header.\n */\n public removeHeader() {\n this._headerFactory = null;\n this.updateHeader();\n }\n\n /**\n * Sets a custom loading state factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as the loading state.\n */\n public setLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setLoadingStateFactory(factory);\n }\n\n /**\n * Sets a custom empty state factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as the empty state.\n */\n public setEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setEmptyStateFactory(factory);\n }\n\n /**\n * Sets a custom error state factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as the error state.\n */\n public setErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setErrorStateFactory(factory);\n }\n\n /**\n * Sets a custom list item factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as a list item.\n */\n public setListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setListItemFactory(factory);\n }\n\n /**\n * Sets a custom pagination item factory for the inbox list.\n * @param factory - A function that returns an HTMLElement to render as a pagination item.\n */\n public setPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setPaginationItemFactory(factory);\n }\n\n /**\n * Registers a handler for message click events.\n * @param handler - A function to be called when a message is clicked.\n */\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageClick = handler;\n\n // Tell the list if we can click. This will update styles if needed.\n this._list?.setCanClickListItems(handler !== undefined);\n }\n\n /**\n * Registers a handler for message action click events.\n * @param handler - A function to be called when a message action is clicked.\n */\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._onMessageActionClick = handler;\n }\n\n /**\n * Registers a handler for message long press events.\n * @param handler - A function to be called when a message is long-pressed.\n */\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageLongPress = handler;\n\n // Tell the list if we can long press. This will update styles if needed.\n this._list?.setCanLongPressListItems(handler !== undefined);\n }\n\n /**\n * Sets the feed type for the inbox (e.g., \"inbox\" or \"archive\").\n * @param feedType - The feed type to display.\n */\n public setFeedType(feedType: CourierInboxFeedType) {\n\n // Do not swap if current feed is same\n if (this._currentFeed === feedType) {\n return;\n }\n\n // Update state\n this._currentFeed = feedType;\n\n // Update components\n this._list?.setFeedType(feedType);\n this.updateHeader();\n\n // Load data\n this.load({\n canUseCache: true\n });\n }\n\n private updateHeader() {\n\n const props = {\n feedType: this._currentFeed,\n unreadCount: CourierInboxDatastore.shared.unreadCount,\n messageCount: this._list?.messages.length ?? 0\n };\n\n switch (this._headerFactory) {\n case undefined:\n this._header?.render(props);\n break;\n case null:\n this._header?.build(null);\n break;\n default:\n const headerElement = this._headerFactory(props);\n this._header?.build(headerElement);\n break;\n }\n\n }\n\n private async load(props: { canUseCache: boolean }) {\n await CourierInboxDatastore.shared.load(props);\n await CourierInboxDatastore.shared.listenForUpdates();\n }\n\n /**\n * Forces a reload of the inbox data, bypassing the cache.\n */\n public refresh() {\n this.load({\n canUseCache: false\n });\n }\n\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'height':\n const height = newValue || this._defaultProps.height;\n this.style.height = height;\n break;\n case 'message-click':\n if (newValue) {\n try {\n this._onMessageClick = new Function('props', newValue) as (props: CourierInboxListItemFactoryProps) => void;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to parse message-click handler:', error);\n }\n } else {\n this._onMessageClick = undefined;\n }\n break;\n case 'message-action-click':\n if (newValue) {\n try {\n this._onMessageActionClick = new Function('props', newValue) as (props: CourierInboxListItemActionFactoryProps) => void;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to parse message-action-click handler:', error);\n }\n } else {\n this._onMessageActionClick = undefined;\n }\n break;\n case 'message-long-press':\n if (newValue) {\n try {\n this._onMessageLongPress = new Function('props', newValue) as (props: CourierInboxListItemFactoryProps) => void;\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to parse message-long-press handler:', error);\n }\n } else {\n this._onMessageLongPress = undefined;\n }\n break;\n case 'light-theme':\n if (newValue) {\n this.setLightTheme(JSON.parse(newValue));\n }\n break;\n case 'dark-theme':\n if (newValue) {\n this.setDarkTheme(JSON.parse(newValue));\n }\n break;\n case 'mode':\n this._themeManager.setMode(newValue as CourierComponentThemeMode);\n break;\n }\n }\n\n}\n\nregisterElement(CourierInbox);\n","import { CourierColors, CourierFactoryElement, CourierIconButton, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\n\nexport class CourierInboxMenuButton extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-menu-button';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // Components\n private _style?: HTMLStyleElement;\n private _container?: HTMLDivElement;\n private _triggerButton?: CourierIconButton;\n private _unreadBadge?: HTMLDivElement;\n\n get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(themeBus: CourierInboxThemeManager) {\n super();\n this._themeSubscription = themeBus.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme();\n });\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxMenuButton.id, CourierInboxMenuButton.getStyles(this.theme));\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n defaultElement(): HTMLElement {\n\n // Create trigger button container\n this._container = document.createElement('div');\n this._container.className = 'menu-button-container';\n\n // Create trigger button\n this._triggerButton = new CourierIconButton(CourierIconSVGs.inbox);\n\n // Create unread badge (red 4x4 circle)\n this._unreadBadge = document.createElement('div');\n this._unreadBadge.className = 'unread-badge';\n this._unreadBadge.style.display = 'none'; // Hidden by default\n\n this._container.appendChild(this._triggerButton);\n this._container.appendChild(this._unreadBadge);\n this.appendChild(this._container);\n\n // Set the theme of the button\n this.refreshTheme();\n\n return this._container;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n return `\n ${CourierInboxMenuButton.id} .menu-button-container {\n position: relative;\n display: inline-block;\n }\n \n ${CourierInboxMenuButton.id} .unread-badge {\n position: absolute;\n top: 2px;\n right: 2px;\n pointer-events: none;\n width: ${theme.popup?.button?.unreadDotIndicator?.height ?? '8px'};\n height: ${theme.popup?.button?.unreadDotIndicator?.width ?? '8px'};\n background: ${theme.popup?.button?.unreadDotIndicator?.backgroundColor ?? 'red'};\n border-radius: ${theme.popup?.button?.unreadDotIndicator?.borderRadius ?? '50%'};\n display: none;\n z-index: 1;\n }\n `;\n }\n\n public onUnreadCountChange(unreadCount: number): void {\n if (this._unreadBadge) {\n this._unreadBadge.style.display = unreadCount > 0 ? 'block' : 'none';\n }\n // Optionally, update theme if needed\n this.refreshTheme();\n }\n\n private refreshTheme() {\n this._triggerButton?.updateIconColor(this.theme?.popup?.button?.icon?.color ?? CourierColors.black[500]);\n this._triggerButton?.updateIconSVG(this.theme?.popup?.button?.icon?.svg ?? CourierIconSVGs.inbox);\n this._triggerButton?.updateBackgroundColor(this.theme?.popup?.button?.backgroundColor ?? 'transparent');\n this._triggerButton?.updateHoverBackgroundColor(this.theme?.popup?.button?.hoverBackgroundColor ?? CourierColors.black[500_10]);\n this._triggerButton?.updateActiveBackgroundColor(this.theme?.popup?.button?.activeBackgroundColor ?? CourierColors.black[500_20]);\n }\n\n}\n\nregisterElement(CourierInboxMenuButton);\n","import { CourierInbox } from \"./courier-inbox\";\nimport { CourierInboxDatastoreEvents } from \"../datastore/datatore-events\";\nimport { CourierInboxDataStoreListener } from \"../datastore/datastore-listener\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxHeaderFactoryProps, CourierInboxListItemActionFactoryProps, CourierInboxListItemFactoryProps, CourierInboxMenuButtonFactoryProps, CourierInboxPaginationItemFactoryProps, CourierInboxStateEmptyFactoryProps, CourierInboxStateErrorFactoryProps, CourierInboxStateLoadingFactoryProps } from \"../types/factories\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxMenuButton } from \"./courier-inbox-menu-button\";\nimport { defaultLightTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\nimport { CourierComponentThemeMode, injectGlobalStyle } from \"@trycourier/courier-ui-core\";\nimport { Courier } from \"@trycourier/courier-js\";\nimport { CourierBaseElement, registerElement } from \"@trycourier/courier-ui-core\";\n\nexport type CourierInboxPopupAlignment = 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center' | 'center-right' | 'center-left' | 'center-center';\n\nexport class CourierInboxPopupMenu extends CourierBaseElement implements CourierInboxDatastoreEvents {\n\n static get id(): string {\n return 'courier-inbox-popup-menu';\n }\n\n // State\n private _width: string = '440px';\n private _height: string = '440px';\n private _popupAlignment: CourierInboxPopupAlignment = 'top-left';\n private _top?: string = undefined;\n private _right?: string = undefined;\n private _bottom?: string = undefined;\n private _left?: string = undefined;\n\n // Theming\n private _themeManager = new CourierInboxThemeManager(defaultLightTheme);\n\n /** Returns the current theme object. */\n get theme() {\n return this._themeManager.getTheme();\n }\n\n /** Returns the current feed type. */\n get currentFeed(): CourierInboxFeedType {\n return this._inbox?.currentFeed ?? 'inbox';\n }\n\n /**\n * Set the light theme for the popup menu.\n * @param theme The light theme object to set.\n */\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n /**\n * Set the dark theme for the popup menu.\n * @param theme The dark theme object to set.\n */\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n /**\n * Set the theme mode (light/dark/system).\n * @param mode The theme mode to set.\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._themeManager.setMode(mode);\n }\n\n // Components\n private _triggerButton?: CourierInboxMenuButton;\n private _popup?: HTMLDivElement;\n private _inbox?: CourierInbox;\n private _style?: HTMLStyleElement;\n\n // Listeners\n private _datastoreListener?: CourierInboxDataStoreListener;\n\n // Factories\n private _popupMenuButtonFactory?: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement;\n\n static get observedAttributes() {\n return ['popup-alignment', 'message-click', 'message-action-click', 'message-long-press', 'popup-width', 'popup-height', 'top', 'right', 'bottom', 'left', 'light-theme', 'dark-theme', 'mode'];\n }\n\n constructor() {\n super();\n\n // Refresh the theme on change\n this._themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n }\n\n onComponentMounted() {\n\n // Inject the styles to the head\n this._style = injectGlobalStyle(CourierInboxPopupMenu.id, CourierInboxPopupMenu.getStyles(this.theme, this._width, this._height));\n\n // Create trigger button\n this._triggerButton = new CourierInboxMenuButton(this._themeManager);\n this._triggerButton.build(undefined);\n\n // Create popup container\n this._popup = document.createElement('div');\n this._popup.className = 'popup';\n\n // Create content container\n this._inbox = new CourierInbox(this._themeManager);\n this._inbox.setAttribute('height', '100%');\n\n this.refreshTheme();\n\n this.appendChild(this._triggerButton);\n this.appendChild(this._popup);\n this._popup.appendChild(this._inbox);\n\n // Add event listeners\n this._triggerButton.addEventListener('click', this.togglePopup.bind(this));\n document.addEventListener('click', this.handleOutsideClick.bind(this));\n\n // Initialize popup position\n this.updatePopupPosition();\n\n // Attach the datastore listener\n this._datastoreListener = new CourierInboxDataStoreListener(this);\n CourierInboxDatastore.shared.addDataStoreListener(this._datastoreListener);\n\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n this._datastoreListener?.remove();\n this._themeManager.cleanup();\n }\n\n private refreshTheme() {\n if (this._style) {\n this._style.textContent = CourierInboxPopupMenu.getStyles(this.theme, this._width, this._height);\n }\n }\n\n static getStyles(theme: CourierInboxTheme, width: string, height: string): string {\n return `\n ${CourierInboxPopupMenu.id} {\n display: inline-block;\n position: relative;\n }\n\n ${CourierInboxPopupMenu.id} .menu-button-container {\n position: relative;\n display: inline-block;\n }\n\n ${CourierInboxPopupMenu.id} .popup {\n display: none;\n position: absolute;\n background: ${theme.popup?.window?.backgroundColor ?? 'red'};\n border-radius: ${theme.popup?.window?.borderRadius ?? '8px'};\n border: ${theme.popup?.window?.border ?? `1px solid red`};\n box-shadow: ${theme.popup?.window?.shadow ?? `0px 8px 16px -4px red`};\n z-index: 1000;\n width: ${width};\n height: ${height};\n overflow: hidden;\n transform: translateZ(0);\n will-change: transform;\n }\n \n ${CourierInboxPopupMenu.id} #unread-badge {\n position: absolute;\n top: -8px;\n left: 50%;\n pointer-events: none;\n }\n\n ${CourierInboxPopupMenu.id} courier-inbox {\n height: 100%;\n }\n `;\n }\n\n attributeChangedCallback(name: string, _: string, newValue: string) {\n switch (name) {\n case 'popup-alignment':\n if (this.isValidPosition(newValue)) {\n this._popupAlignment = newValue as CourierInboxPopupAlignment;\n this.updatePopupPosition();\n }\n break;\n case 'popup-width':\n this._width = newValue;\n this.setSize(newValue, this._height);\n break;\n case 'popup-height':\n this._height = newValue;\n this.setSize(this._width, newValue);\n break;\n case 'top':\n this._top = newValue;\n this.updatePopupPosition();\n break;\n case 'right':\n this._right = newValue;\n this.updatePopupPosition();\n break;\n case 'bottom':\n this._bottom = newValue;\n this.updatePopupPosition();\n break;\n case 'left':\n this._left = newValue;\n this.updatePopupPosition();\n break;\n case 'light-theme':\n if (newValue) {\n this.setLightTheme(JSON.parse(newValue));\n }\n break;\n case 'dark-theme':\n if (newValue) {\n this.setDarkTheme(JSON.parse(newValue));\n }\n break;\n case 'mode':\n this._themeManager.setMode(newValue as CourierComponentThemeMode);\n break;\n }\n }\n\n /**\n * Called when the unread count changes.\n * @param _ The new unread count (unused).\n */\n public onUnreadCountChange(_: number): void {\n this.render();\n }\n\n /**\n * Set a handler for message click events.\n * @param handler The function to call when a message is clicked.\n */\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageClick((props) => {\n if (handler) {\n handler(props);\n }\n this.closePopup();\n });\n }\n\n /**\n * Set a handler for message action click events.\n * @param handler The function to call when a message action is clicked.\n */\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._inbox?.onMessageActionClick((props) => {\n if (handler) {\n handler(props);\n }\n this.closePopup();\n });\n }\n\n /**\n * Set a handler for message long press events.\n * @param handler The function to call when a message is long pressed.\n */\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageLongPress((props) => {\n if (handler) {\n handler(props);\n }\n this.closePopup();\n });\n }\n\n private isValidPosition(value: string): value is CourierInboxPopupAlignment {\n const validPositions: CourierInboxPopupAlignment[] = [\n 'top-right', 'top-left', 'top-center',\n 'bottom-right', 'bottom-left', 'bottom-center',\n 'center-right', 'center-left', 'center-center'\n ];\n return validPositions.includes(value as CourierInboxPopupAlignment);\n }\n\n private updatePopupPosition() {\n if (!this._popup) return;\n\n // Reset all positions\n this._popup.style.top = '';\n this._popup.style.bottom = '';\n this._popup.style.left = '';\n this._popup.style.right = '';\n this._popup.style.margin = '';\n this._popup.style.transform = '';\n\n switch (this._popupAlignment) {\n case 'top-right':\n this._popup.style.top = this._top ?? '40px';\n this._popup.style.right = this._right ?? '0px';\n break;\n case 'top-left':\n this._popup.style.top = this._top ?? '40px';\n this._popup.style.left = this._left ?? '0px';\n break;\n case 'top-center':\n this._popup.style.top = this._top ?? '40px';\n this._popup.style.left = '50%';\n this._popup.style.transform = 'translateX(-50%)';\n break;\n case 'bottom-right':\n this._popup.style.bottom = this._bottom ?? '40px';\n this._popup.style.right = this._right ?? '0px';\n break;\n case 'bottom-left':\n this._popup.style.bottom = this._bottom ?? '40px';\n this._popup.style.left = this._left ?? '0px';\n break;\n case 'bottom-center':\n this._popup.style.bottom = this._bottom ?? '40px';\n this._popup.style.left = '50%';\n this._popup.style.transform = 'translateX(-50%)';\n break;\n case 'center-right':\n this._popup.style.top = '50%';\n this._popup.style.right = this._right ?? '40px';\n this._popup.style.transform = 'translateY(-50%)';\n break;\n case 'center-left':\n this._popup.style.top = '50%';\n this._popup.style.left = this._left ?? '40px';\n this._popup.style.transform = 'translateY(-50%)';\n break;\n case 'center-center':\n this._popup.style.top = '50%';\n this._popup.style.left = '50%';\n this._popup.style.transform = 'translate(-50%, -50%)';\n break;\n }\n }\n\n /**\n * Toggle the popup menu open/closed.\n * @param event The click event that triggered the toggle.\n */\n private togglePopup(event: Event) {\n event.stopPropagation();\n if (!this._popup) return;\n\n const isVisible = this._popup.style.display === 'block';\n this._popup.style.display = isVisible ? 'none' : 'block';\n }\n\n /**\n * Close the popup menu.\n */\n public closePopup() {\n if (!this._popup) return;\n this._popup.style.display = 'none';\n }\n\n private handleOutsideClick = (event: MouseEvent) => {\n if (!this._popup) return;\n\n // Nodes the click may legally occur inside without closing the popup\n const SAFE_SELECTORS = [\n 'courier-inbox-option-menu',\n ];\n\n // composedPath() gives us every node (even inside shadow DOMs)\n const clickIsInsideAllowedArea = event\n .composedPath()\n .some(node => {\n if (!(node instanceof HTMLElement)) return false;\n if (node === this._popup || this._popup!.contains(node)) return true;\n return SAFE_SELECTORS.some(sel => node.matches(sel));\n });\n\n if (clickIsInsideAllowedArea) return;\n\n // Otherwise, it really was an outside click – hide the popup\n this._popup.style.display = 'none';\n };\n\n /**\n * Set the content of the popup inbox.\n * @param element The HTMLElement to set as the content.\n */\n public setContent(element: HTMLElement) {\n if (!this._inbox) return;\n this._inbox.innerHTML = '';\n this._inbox.appendChild(element);\n }\n\n /**\n * Set the size of the popup menu.\n * @param width The width to set.\n * @param height The height to set.\n */\n public setSize(width: string, height: string) {\n this._width = width;\n this._height = height;\n if (!this._popup) return;\n this._popup.style.width = width;\n this._popup.style.height = height;\n }\n\n /**\n * Set the popup alignment/position.\n * @param position The alignment/position to set.\n */\n public setPosition(position: CourierInboxPopupAlignment) {\n if (this.isValidPosition(position)) {\n this._popupAlignment = position;\n this.updatePopupPosition();\n } else {\n Courier.shared.client?.options.logger?.error(`Invalid position: ${position}`);\n }\n }\n\n /**\n * Set the feed type for the inbox.\n * @param feedType The feed type to set.\n */\n public setFeedType(feedType: CourierInboxFeedType) {\n this._inbox?.setFeedType(feedType);\n }\n\n // Factory methods\n /**\n * Set a custom header factory for the inbox.\n * @param factory The factory function for the header.\n */\n public setHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setHeader(factory);\n }\n\n /**\n * Remove the custom header from the inbox.\n */\n public removeHeader() {\n this._inbox?.removeHeader();\n }\n\n /**\n * Set a custom loading state factory for the inbox.\n * @param factory The factory function for the loading state.\n */\n public setLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setLoadingState(factory);\n }\n\n /**\n * Set a custom empty state factory for the inbox.\n * @param factory The factory function for the empty state.\n */\n public setEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setEmptyState(factory);\n }\n\n /**\n * Set a custom error state factory for the inbox.\n * @param factory The factory function for the error state.\n */\n public setErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setErrorState(factory);\n }\n\n /**\n * Set a custom list item factory for the inbox.\n * @param factory The factory function for the list item.\n */\n public setListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setListItem(factory);\n }\n\n /**\n * Set a custom pagination item factory for the inbox.\n * @param factory The factory function for the pagination item.\n */\n public setPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setPaginationItem(factory);\n }\n\n /**\n * Set a custom menu button factory for the popup trigger.\n * @param factory The factory function for the menu button.\n */\n public setMenuButton(factory: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement) {\n this._popupMenuButtonFactory = factory;\n this.render();\n }\n\n private render() {\n const unreadCount = CourierInboxDatastore.shared.unreadCount;\n if (!this._triggerButton) return;\n\n switch (this._popupMenuButtonFactory) {\n case undefined:\n case null:\n this._triggerButton.build(undefined);\n this._triggerButton.onUnreadCountChange(unreadCount);\n break;\n default:\n const customButton = this._popupMenuButtonFactory({ unreadCount });\n this._triggerButton.build(customButton);\n break;\n }\n }\n\n}\n\nregisterElement(CourierInboxPopupMenu);\n","export * from './components/courier-inbox';\nexport * from './components/courier-inbox-header';\nexport * from './components/courier-inbox-list-item';\nexport * from './components/courier-inbox-popup-menu';\nexport * from './utils/extensions';\nexport * from './types/factories';\nexport * from './types/feed-type';\nexport * from './types/courier-inbox-theme';\nexport * from './types/courier-inbox-theme-manager';\nexport * from './types/inbox-data-set';\nexport * from './datastore/datastore';\nexport * from './datastore/datastore-listener';\nexport * from './datastore/datatore-events';\n\nimport { Courier } from \"@trycourier/courier-js\";\n\nCourier.shared.courierUserAgentName = \"courier-ui-inbox\";\nCourier.shared.courierUserAgentVersion = __PACKAGE_VERSION__;\n\n// Re-export Courier from courier-js for direct import\nexport { Courier };\n\n// Re-export types from courier-js\nexport type {\n CourierProps,\n CourierClientOptions,\n CourierBrand,\n CourierApiUrls,\n CourierUserPreferences,\n CourierUserPreferencesStatus,\n CourierUserPreferencesChannel,\n CourierUserPreferencesPaging,\n CourierUserPreferencesTopic,\n CourierUserPreferencesTopicResponse,\n CourierDevice,\n CourierToken,\n CourierGetInboxMessageResponse,\n CourierGetInboxMessagesResponse,\n InboxMessage,\n InboxAction,\n InboxMessageEventEnvelope,\n} from '@trycourier/courier-js';\n\n// Re-export types from courier-ui-core\nexport type {\n CourierComponentThemeMode\n} from '@trycourier/courier-ui-core'\n","import { CourierInboxFeedType } from \"../types/feed-type\";\nimport { InboxDataSet } from \"../types/inbox-data-set\";\nimport { InboxMessage } from \"@trycourier/courier-js\";\n\nexport class CourierInboxDatastoreEvents {\n public onDataSetChange?(_: InboxDataSet, __: CourierInboxFeedType): void { }\n public onPageAdded?(_: InboxDataSet, __: CourierInboxFeedType): void { }\n public onUnreadCountChange?(_: number): void { }\n public onMessageAdd?(_: InboxMessage, __: number, ___: CourierInboxFeedType): void { }\n public onMessageRemove?(_: InboxMessage, __: number, ___: CourierInboxFeedType): void { }\n public onMessageUpdate?(_: InboxMessage, __: number, ___: CourierInboxFeedType): void { }\n public onError?(_: Error): void { }\n}\n"],"names":["copyMessage","message","copy","actions","map","action","data","JSON","parse","stringify","copyInboxAction","tags","trackingIds","copyInboxDataSet","dataSet","messages","CourierInboxListItemMenu","CourierBaseElement","constructor","theme","super","__publicField","this","_theme","id","onComponentMounted","menu","document","createElement","className","appendChild","getStyles","_c","_b","_a","inbox","list","item","backgroundColor","border","borderRadius","shadow","setOptions","options","_options","renderMenu","querySelector","innerHTML","menuTheme","cancelEvent","e","stopPropagation","preventDefault","forEach","opt","icon","CourierIconButton","svg","color","hoverBackgroundColor","activeBackgroundColor","handleInteraction","onClick","addEventListener","show","style","display","classList","add","hide","remove","registerElement","_CourierInboxDatastore","shared","instance","unreadCount","_unreadCount","inboxDataSet","_inboxDataSet","feedType","canPaginate","paginationCursor","archiveDataSet","_archiveDataSet","addDataStoreListener","listener","_dataStoreListeners","push","removeDataStoreListener","filter","l","fetchCachableDataSet","props","canUseCache","response","fetch","nodes","_e","_d","pageInfo","hasNextPage","_h","_f","_g","startCursor","fetchUnreadCount","Courier","client","getUnreadMessageCount","load","userId","Error","properties","Promise","all","getMessages","getArchivedMessages","events","onDataSetChange","call","onUnreadCountChange","error","logger","onError","listenForUpdates","connectSocket","socket","info","_removeMessageEventListener","addMessageEventListener","event","InboxMessageEvent","NewMessage","addMessage","getMessage","messageId","MarkAllRead","readAllMessages","canCallApi","Read","readMessage","Unread","unreadMessage","Opened","openMessage","Archive","archiveMessage","ArchiveRead","archiveReadMessages","ArchiveAll","archiveAllMessages","Clicked","clickMessage","Unarchive","unarchiveMessage","Unopened","isConnecting","isOpen","connectionId","connect","find","m","fetchNextPageOfMessages","isPaginatingInbox","paginationLimit","_j","_i","addPage","isPaginatingArchive","_m","_p","_o","_s","_q","_r","_v","_t","_u","canMutate","datastoreSnapshot","getDatastoreSnapshot","snapshot","getMessageSnapshot","read","Date","toISOString","applyMessageSnapshot","applyDatastoreSnapshot","unread","inboxIndex","archiveIndex","opened","open","clickTrackingId","click","trackingId","messageSnapshot","archived","removeMessage","insertIndex","findInsertIndex","archive","unarchive","timestamp","findIndex","splice","archiveRead","archiveAll","readAll","newMessage","i","length","created","onPageAdded","index","onMessageAdd","onMessageRemove","updateMessage","onMessageUpdate","CourierInboxDatastore","CourierInboxListItem","themeManager","canClick","_canLongPress","_canClick","_themeManager","getTheme","_isMobile","window","render","_setupIntersectionObserver","contentContainer","_titleElement","_subtitleElement","_actionsContainer","_timeElement","_unreadIndicator","_menu","_getMenuOptions","append","cancelPropagation","contains","target","composedPath","includes","_message","onItemClick","CourierIcon","_isLongPress","_setupHoverBehavior","_setupLongPressBehavior","IntersectionObserver","_observer","disconnect","entries","entry","intersectionRatio","onItemVisible","threshold","observe","onComponentUnmounted","divider","unreadIndicatorColor","title","family","_l","_k","size","_n","subtitle","time","_x","_w","_z","_y","_showMenu","_hideMenu","enabled","longPress","_longPressTimeout","setTimeout","onItemLongPress","navigator","vibrate","vibrationDuration","displayDuration","passive","clearTimeout","isArchiveFeed","_feedType","opacity","setMessage","_updateContent","setOnItemClick","cb","setOnItemActionClick","onItemActionClick","setOnItemLongPress","setOnItemVisible","textContent","toggle","preview","body","now","messageDate","diffInSeconds","Math","floor","getTime","getMessageTime","hasActions","actionsTheme","actionButton","CourierButton","mode","text","content","variant","fontFamily","font","fontSize","fontWeight","weight","textColor","CourierInboxSkeletonListItem","_style","injectGlobalStyle","firstRow","CourierSkeletonAnimatedRow","secondRow","thirdRow","skeletonItem","loading","animation","barColor","hexColor","r","parseInt","slice","g","b","colorWithAlpha80","colorWithAlpha40","barHeight","duration","barBorderRadius","CourierInboxSkeletonList","CourierFactoryElement","defaultElement","CourierInboxPaginationListItem","_customItem","customItem","_onPaginationTrigger","onPaginationTrigger","container","_skeletonLoadingList","build","isIntersecting","CourierInboxList","_onRefresh","onRefresh","_onMessageClick","onMessageClick","_onMessageActionClick","onMessageActionClick","_onMessageLongPress","onMessageLongPress","_themeSubscription","subscribe","_","_messages","manager","_listStyles","_listItemStyles","_listItemMenuStyles","unsubscribe","setCanClickListItems","_canClickListItems","setCanLongPressListItems","canLongPress","_canLongPressListItems","setDataSet","_canPaginate","Boolean","_error","_isLoading","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","refreshInfoStateThemes","_emptyContainer","updateStyles","errorProps","emptyProps","themeMode","button","empty","firstChild","removeChild","_errorContainer","CourierInfoState","_errorStateFactory","loadingElement","_loadingStateFactory","_emptyStateFactory","_listItemFactory","listItem","openVisibleMessage","paginationItem","_paginationItemFactory","setLoadingStateFactory","factory","setEmptyStateFactory","setErrorStateFactory","setListItemFactory","setPaginationItemFactory","CourierInboxOptionMenuItem","_option","option","_isSelected","isSelected","_isSelectedable","selectable","_content","_itemIcon","CourierIconSVGs","setAttribute","_title","spacer","_selectionIcon","check","refreshTheme","updateColor","selectionIcon","updateSVG","CourierInboxOptionMenu","type","onMenuOpen","_type","_selectable","_selectedIndex","_onMenuOpen","_menuButton","overflow","toggleMenu","bind","handleOutsideClick","header","menus","popup","_E","_D","_C","_B","_A","_K","_J","_I","_H","_G","_F","_Q","_P","_O","_N","_M","_L","_W","_V","_U","_T","_S","_R","_aa","_$","__","_Z","_Y","_X","isFilter","buttonConfig","filters","defaultIcon","updateIconSVG","updateIconColor","updateBackgroundColor","updateHoverBackgroundColor","updateActiveBackgroundColor","refreshMenuItems","menuItem","closeMenu","isOpening","selectOption","o","CourierUnreadCountBadge","_location","location","themeBus","_badge","updateBadge","unreadIndicator","padding","setCount","count","_count","toString","CourierInboxHeaderTitle","_iconElement","_unreadBadge","updateFilter","updateSelectedOption","CourierInboxHeader","_onFeedTypeChange","onFeedTypeChange","observedAttributes","onComponentUmounted","getFilterOptions","filterMenu","handleOptionMenuItemClick","getActionOptions","actionMenu","markAllRead","_filterMenu","_actionMenu","_titleSection","newElement","filterOptions","headerContent","CourierColors","white","CourierInboxDataStoreListener","defaultLightTheme","black","unreadDotIndicator","blue","height","width","gray","defaultDarkTheme","mergeTheme","defaultTheme","_ba","_ea","_da","_ca","_ha","_ga","_fa","_la","_ia","_ja","_ka","_pa","_ma","_na","_oa","_ua","_ta","_sa","_ra","_qa","_za","_ya","_xa","_wa","_va","_Ea","_Da","_Ca","_Ba","_Aa","_Ja","_Ia","_Ha","_Ga","_Fa","_Ma","_La","_Ka","_Pa","_Oa","_Na","_Ta","_Qa","_Ra","_Sa","_Xa","_Ua","_Va","_Wa","_ab","_$a","__a","_Za","_Ya","_fb","_eb","_db","_cb","_bb","_jb","_gb","_hb","_ib","_nb","_kb","_lb","_mb","_sb","_rb","_qb","_pb","_ob","_xb","_wb","_vb","_ub","_tb","_Ab","_zb","_yb","_Db","_Cb","_Bb","_Hb","_Eb","_Fb","_Gb","_Lb","_Ib","_Jb","_Kb","_Qb","_Pb","_Ob","_Nb","_Mb","_Vb","_Ub","_Tb","_Sb","_Rb","_Zb","_Wb","_Xb","_Yb","_bc","__b","_$b","_ac","_gc","_fc","_ec","_dc","_cc","_lc","_kc","_jc","_ic","_hc","_pc","_mc","_nc","_oc","_tc","_qc","_rc","_sc","_yc","_xc","_wc","_vc","_uc","_Dc","_Cc","_Bc","_Ac","_zc","_Ec","_Fc","_Hc","_Gc","_Jc","_Ic","_Mc","_Lc","_Kc","_Pc","_Oc","_Nc","_Tc","_Qc","_Rc","_Sc","_Xc","_Uc","_Vc","_Wc","_ad","_$c","__c","_Zc","_Yc","_fd","_ed","_dd","_cd","_bd","_kd","_jd","_id","_hd","_gd","_pd","_od","_nd","_md","_ld","_ud","_td","_sd","_rd","_qd","_zd","_yd","_xd","_wd","_vd","_Ed","_Dd","_Cd","_Bd","_Ad","_Jd","_Id","_Hd","_Gd","_Fd","_Kd","_Ld","_Md","_Nd","_Od","_Pd","CourierInboxThemeManager","CourierThemeManager","initialTheme","getDefaultLightTheme","getDefaultDarkTheme","callback","CourierInbox","_currentFeed","currentFeed","setLightTheme","setDarkTheme","setMode","_inboxStyle","_unreadIndicatorStyle","_header","_list","canClickListItems","canLongPressListItems","refresh","async","dispatchEvent","CustomEvent","detail","bubbles","composed","_datastoreListener","updateHeader","_authListener","addAuthenticationListener","cleanup","_defaultProps","setHeader","_headerFactory","removeHeader","setLoadingState","setEmptyState","setErrorState","setListItem","setPaginationItem","handler","messageCount","headerElement","attributeChangedCallback","name","oldValue","newValue","Function","CourierInboxMenuButton","_container","_triggerButton","CourierInboxPopupMenu","_popup","SAFE_SELECTORS","some","node","HTMLElement","sel","matches","_inbox","_width","_height","togglePopup","updatePopupPosition","isValidPosition","_popupAlignment","setSize","_top","_right","_bottom","_left","closePopup","value","top","bottom","left","right","margin","transform","isVisible","setContent","element","setPosition","position","setMenuButton","_popupMenuButtonFactory","customButton","courierUserAgentName","courierUserAgentVersion","___"],"mappings":"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"}