@trycourier/courier-ui-inbox 1.0.8-beta → 1.0.9-beta

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":["../../courier-ui-core/dist/index.mjs","../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/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/datastore/datatore-events.ts","../src/utils/extensions.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar _isInitialised;\nconst CourierColors = {\n black: {\n 400: \"#0A0A0A\",\n 500: \"#171717\",\n 50010: \"#1717171A\",\n 50020: \"#17171733\"\n },\n gray: {\n 200: \"#F5F5F5\",\n 400: \"#3A3A3A\",\n 500: \"#E5E5E5\",\n 600: \"#737373\"\n },\n white: {\n 500: \"#FFFFFF\",\n 50010: \"#FFFFFF1A\",\n 50020: \"#FFFFFF33\"\n },\n blue: {\n 400: \"#60A5FA\",\n 500: \"#2563EB\"\n }\n};\nconst theme = {\n light: {\n colors: {\n primary: CourierColors.black[500],\n secondary: CourierColors.white[500],\n border: CourierColors.gray[500],\n link: CourierColors.blue[500],\n icon: CourierColors.black[500]\n },\n button: {\n cornerRadius: \"4px\"\n }\n },\n dark: {\n colors: {\n primary: CourierColors.white[500],\n secondary: CourierColors.black[500],\n border: CourierColors.gray[400],\n link: CourierColors.blue[400],\n icon: CourierColors.white[500]\n },\n button: {\n cornerRadius: \"4px\"\n }\n }\n};\nconst getSystemThemeMode = () => {\n if (typeof window === \"undefined\") {\n return \"light\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n};\nconst addSystemThemeModeListener = (callback) => {\n if (typeof window === \"undefined\") {\n return () => {\n };\n }\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = (e) => {\n callback(e.matches ? \"dark\" : \"light\");\n };\n mediaQuery.addEventListener(\"change\", handler);\n return () => {\n mediaQuery.removeEventListener(\"change\", handler);\n };\n};\nconst HTMLElementBase = (() => {\n try {\n return typeof HTMLElement === \"undefined\" ? class {\n } : HTMLElement;\n } catch {\n return class {\n };\n }\n})();\nclass CourierBaseElement extends HTMLElementBase {\n constructor() {\n super(...arguments);\n /** Prevents double-initialisation when the node is re-inserted. */\n __privateAdd(this, _isInitialised, false);\n }\n /** Tag-name you’ll use in `customElements.define()` */\n static get id() {\n return \"courier-base-element\";\n }\n /* ------------------------------------------------------------------ */\n /* Custom-elements lifecycle hooks */\n /* ------------------------------------------------------------------ */\n connectedCallback() {\n var _a;\n if (__privateGet(this, _isInitialised)) return;\n __privateSet(this, _isInitialised, true);\n (_a = this.onComponentMounted) == null ? void 0 : _a.call(this);\n }\n disconnectedCallback() {\n var _a;\n __privateSet(this, _isInitialised, false);\n (_a = this.onComponentUnmounted) == null ? void 0 : _a.call(this);\n }\n /* ------------------------------------------------------------------ */\n /* Overridable hooks */\n /* ------------------------------------------------------------------ */\n /** Called **once** when the element first becomes part of the DOM. */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onComponentMounted() {\n }\n /** Called when the element is removed from the DOM. */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onComponentUnmounted() {\n }\n}\n_isInitialised = new WeakMap();\nclass CourierSystemThemeElement extends CourierBaseElement {\n constructor() {\n super();\n // State\n __publicField(this, \"_currentSystemTheme\");\n // System theme\n __publicField(this, \"_systemThemeCleanup\");\n this._currentSystemTheme = getSystemThemeMode();\n this._systemThemeCleanup = addSystemThemeModeListener((mode) => {\n this._currentSystemTheme = mode;\n this.onSystemThemeChange(mode);\n });\n }\n static get id() {\n return \"courier-system-theme-element\";\n }\n get currentSystemTheme() {\n return this._currentSystemTheme;\n }\n onComponentUnmounted() {\n var _a;\n (_a = this._systemThemeCleanup) == null ? void 0 : _a.call(this);\n super.onComponentUnmounted();\n }\n onSystemThemeChange(_) {\n }\n}\nconst baseButtonStyles = {\n borderRadius: \"4px\",\n fontSize: \"14px\"\n};\nconst CourierButtonVariants = {\n primary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.primary,\n textColor: theme[mode].colors.secondary,\n fontWeight: \"500\",\n shadow: \"none\"\n }),\n secondary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.secondary,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: `1px solid ${theme[mode].colors.border}`,\n shadow: mode === \"light\" ? \"0px 1px 2px 0px rgba(0, 0, 0, 0.06)\" : \"0px 1px 2px 0px rgba(255, 255, 255, 0.1)\"\n }),\n tertiary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.border,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: \"none\",\n shadow: \"none\"\n })\n};\nclass CourierButton extends CourierSystemThemeElement {\n constructor(props) {\n super();\n // Components\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n const shadow = this.attachShadow({ mode: \"open\" });\n this._button = document.createElement(\"button\");\n this._button.setAttribute(\"part\", \"button\");\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(props);\n shadow.appendChild(this._style);\n shadow.appendChild(this._button);\n this.updateButton(props);\n this._button.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (props.onClick) {\n props.onClick();\n }\n });\n }\n static get id() {\n return \"courier-button\";\n }\n getStyles(props) {\n const defaultTextColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.textColor;\n };\n const defaultBackgroundColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.backgroundColor;\n };\n const defaultBorder = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.border;\n };\n const defaultShadow = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.shadow;\n };\n const defaultBorderRadius = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.borderRadius;\n };\n const defaultFontSize = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontSize;\n };\n const defaultFontWeight = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontWeight;\n };\n return `\n :host {\n display: inline-block;\n }\n\n button {\n border: none;\n border-radius: ${props.borderRadius ?? defaultBorderRadius()};\n font-weight: ${props.fontWeight ?? defaultFontWeight()};\n font-family: ${props.fontFamily ?? \"inherit\"};\n font-size: ${props.fontSize ?? defaultFontSize()};\n padding: 6px 10px;\n cursor: pointer;\n width: 100%;\n height: 100%;\n background-color: ${props.backgroundColor ?? defaultBackgroundColor()};\n color: ${props.textColor ?? defaultTextColor()};\n border: ${props.border ?? defaultBorder()};\n box-shadow: ${props.shadow ?? defaultShadow()};\n touch-action: manipulation;\n }\n\n button:hover {\n ${props.hoverBackgroundColor ? `background-color: ${props.hoverBackgroundColor};` : \"filter: brightness(0.9);\"}\n }\n\n button:active {\n ${props.activeBackgroundColor ? `background-color: ${props.activeBackgroundColor};` : \"filter: brightness(0.8);\"}\n }\n\n button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `;\n }\n updateButton(props) {\n if (props.text) {\n this._button.textContent = props.text;\n }\n this._style.textContent = this.getStyles(props);\n }\n}\nconst CourierIconSVGs = {\n inbox: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 14.5V17C5.5 17.2812 5.71875 17.5 6 17.5H18C18.25 17.5 18.5 17.2812 18.5 17V14.5H15.9375L15.2812 15.8125C15.0938 16.25 14.6562 16.5 14.1875 16.5H9.78125C9.3125 16.5 8.875 16.25 8.6875 15.8125L8.03125 14.5H5.5ZM18.1875 13L16.6562 6.90625C16.5938 6.65625 16.4062 6.5 16.1875 6.5H7.8125C7.5625 6.5 7.375 6.65625 7.3125 6.90625L5.78125 13H8.1875C8.65625 13 9.09375 13.2812 9.3125 13.7188L9.9375 15H14.0312L14.6875 13.7188C14.875 13.2812 15.3125 13 15.7812 13H18.1875ZM4 14.25C4 14.0938 4 13.9375 4.03125 13.7812L5.84375 6.53125C6.09375 5.625 6.875 5 7.8125 5H16.1875C17.0938 5 17.9062 5.625 18.125 6.53125L19.9375 13.7812C19.9688 13.9375 20 14.0938 20 14.25V17C20 18.125 19.0938 19 18 19H6C4.875 19 4 18.125 4 17V14.25Z\" fill=\"currentColor\"/>\n</svg>`,\n archive: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 6.5V8H18.5V6.5H5.5ZM5 5H19C19.5312 5 20 5.46875 20 6V8.5C20 9.0625 19.5312 9.5 19 9.5H5C4.4375 9.5 4 9.0625 4 8.5V6C4 5.46875 4.4375 5 5 5ZM9 11.75C9 11.3438 9.3125 11 9.75 11H14.25C14.6562 11 15 11.3438 15 11.75C15 12.1875 14.6562 12.5 14.25 12.5H9.75C9.3125 12.5 9 12.1875 9 11.75ZM5 17V10.5H6.5V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V10.5H19V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17Z\" fill=\"currentColor\"/>\n</svg>`,\n check: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.793 7.33203C19.0742 7.64453 19.0742 8.11328 18.793 8.39453L10.543 16.6445C10.2305 16.957 9.76172 16.957 9.48047 16.6445L5.23047 12.3945C4.91797 12.1133 4.91797 11.6445 5.23047 11.3633C5.51172 11.0508 5.98047 11.0508 6.26172 11.3633L9.98047 15.082L17.7305 7.33203C18.0117 7.05078 18.4805 7.05078 18.7617 7.33203H18.793Z\" fill=\"currentColor\"/>\n</svg>`,\n filter: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5 7C5 6.59375 5.3125 6.25 5.75 6.25H18.25C18.6562 6.25 19 6.59375 19 7C19 7.4375 18.6562 7.75 18.25 7.75H5.75C5.3125 7.75 5 7.4375 5 7ZM7 12C7 11.5938 7.3125 11.25 7.75 11.25H16.25C16.6562 11.25 17 11.5938 17 12C17 12.4375 16.6562 12.75 16.25 12.75H7.75C7.3125 12.75 7 12.4375 7 12ZM14 17C14 17.4375 13.6562 17.75 13.25 17.75H10.75C10.3125 17.75 10 17.4375 10 17C10 16.5938 10.3125 16.25 10.75 16.25H13.25C13.6562 16.25 14 16.5938 14 17Z\" fill=\"currentColor\"/>\n</svg>`,\n right: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.75 12.547L13.25 17.797C12.9375 18.0783 12.4688 18.0783 12.1875 17.7658C11.9062 17.4533 11.9062 16.9845 12.2188 16.7033L16.375 12.7345H5.75C5.3125 12.7345 5 12.422 5 11.9845C5 11.5783 5.3125 11.2345 5.75 11.2345H16.375L12.2188 7.29703C11.9062 7.01578 11.9062 6.51578 12.1875 6.23453C12.4688 5.92203 12.9688 5.92203 13.25 6.20328L18.75 11.4533C18.9062 11.6095 19 11.797 19 11.9845C19 12.2033 18.9062 12.3908 18.75 12.547Z\" fill=\"currentColor\"/>\n</svg>`,\n remove: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.7969 8.27344L13.0469 12.0234L16.7656 15.7422C17.0781 16.0234 17.0781 16.4922 16.7656 16.7734C16.4844 17.0859 16.0156 17.0859 15.7344 16.7734L11.9844 13.0547L8.26562 16.7734C7.98438 17.0859 7.51562 17.0859 7.23438 16.7734C6.92188 16.4922 6.92188 16.0234 7.23438 15.7109L10.9531 11.9922L7.23438 8.27344C6.92188 7.99219 6.92188 7.52344 7.23438 7.21094C7.51562 6.92969 7.98438 6.92969 8.29688 7.21094L12.0156 10.9609L15.7344 7.24219C16.0156 6.92969 16.4844 6.92969 16.7969 7.24219C17.0781 7.52344 17.0781 7.99219 16.7969 8.27344Z\" fill=\"currentColor\"/>\n</svg>`,\n overflow: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.5117 11.9883C18.5117 12.5508 18.1992 13.0195 17.7617 13.3008C17.293 13.582 16.6992 13.582 16.2617 13.3008C15.793 13.0195 15.5117 12.5508 15.5117 11.9883C15.5117 11.457 15.793 10.9883 16.2617 10.707C16.6992 10.4258 17.293 10.4258 17.7617 10.707C18.1992 10.9883 18.5117 11.457 18.5117 11.9883ZM13.5117 11.9883C13.5117 12.5508 13.1992 13.0195 12.7617 13.3008C12.293 13.582 11.6992 13.582 11.2617 13.3008C10.793 13.0195 10.5117 12.5508 10.5117 11.9883C10.5117 11.457 10.793 10.9883 11.2617 10.707C11.6992 10.4258 12.293 10.4258 12.7617 10.707C13.1992 10.9883 13.5117 11.457 13.5117 11.9883ZM7.01172 13.4883C6.44922 13.4883 5.98047 13.207 5.69922 12.7383C5.41797 12.3008 5.41797 11.707 5.69922 11.2383C5.98047 10.8008 6.44922 10.4883 7.01172 10.4883C7.54297 10.4883 8.01172 10.8008 8.29297 11.2383C8.57422 11.707 8.57422 12.3008 8.29297 12.7383C8.01172 13.207 7.54297 13.4883 7.01172 13.4883Z\" fill=\"currentColor\"/>\n</svg>`,\n read: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7 6.5C6.71875 6.5 6.5 6.75 6.5 7V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V7C17.5 6.75 17.25 6.5 17 6.5H7ZM5 7C5 5.90625 5.875 5 7 5H17C18.0938 5 19 5.90625 19 7V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17V7ZM15.5312 10.5312L11.5312 14.5312C11.2188 14.8438 10.75 14.8438 10.4688 14.5312L8.46875 12.5312C8.15625 12.25 8.15625 11.7812 8.46875 11.5C8.75 11.1875 9.21875 11.1875 9.53125 11.5L11 12.9688L14.4688 9.46875C14.75 9.1875 15.2188 9.1875 15.5 9.46875C15.8125 9.78125 15.8125 10.25 15.5 10.5312H15.5312Z\" fill=\"currentColor\"/>\n</svg>`,\n archiveRead: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.5 6.5V15.25H16.5V6.5H7.5ZM6 15.25V6.5C6 5.6875 6.65625 5 7.5 5H16.5C17.3125 5 18 5.6875 18 6.5V15.25C18.4062 15.25 18.75 15.5938 18.75 16C18.75 16.4375 18.4062 16.75 18 16.75H6C5.5625 16.75 5.25 16.4375 5.25 16C5.25 15.5938 5.5625 15.25 6 15.25ZM5 13V14.5H4.5V17.5H19.5V14.5H19V13H19.5C20.3125 13 21 13.6875 21 14.5V17.5C21 18.3438 20.3125 19 19.5 19H4.5C3.65625 19 3 18.3438 3 17.5V14.5C3 13.6875 3.65625 13 4.5 13H5ZM15.0312 9.625L11.6875 12.9688C11.5312 13.0938 11.3438 13.1875 11.1562 13.1875C10.9375 13.1875 10.75 13.0938 10.625 12.9688L8.96875 11.2812C8.65625 11 8.65625 10.5312 8.96875 10.25C9.25 9.9375 9.71875 9.9375 10 10.25L11.1562 11.375L13.9688 8.5625C14.25 8.28125 14.7188 8.28125 15 8.5625C15.3125 8.875 15.3125 9.34375 15 9.625H15.0312Z\" fill=\"currentColor\"/>\n</svg>`,\n unread: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M17 6.5H7C6.71875 6.5 6.5 6.75 6.5 7V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V7C17.5 6.75 17.25 6.5 17 6.5ZM7 5H17C18.0938 5 19 5.90625 19 7V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17V7C5 5.90625 5.875 5 7 5Z\" fill=\"currentColor\"/>\n</svg>`,\n unarchive: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 11C5.0625 11 4.75 10.6875 4.75 10.25V5.75C4.75 5.34375 5.0625 5 5.5 5C5.90625 5 6.25 5.34375 6.25 5.75V8.28125L6.875 7.53125C8.15625 6 10.0625 5 12.25 5C16.0938 5 19.25 8.15625 19.25 12C19.25 15.875 16.0938 19 12.25 19C10.6562 19 9.21875 18.5 8.03125 17.625C7.71875 17.375 7.625 16.9062 7.875 16.5625C8.125 16.2188 8.59375 16.1562 8.9375 16.4062C9.84375 17.0938 11 17.5 12.25 17.5C15.2812 17.5 17.75 15.0625 17.75 12C17.75 8.96875 15.2812 6.5 12.25 6.5C10.5312 6.5 9.03125 7.28125 8 8.5L7.15625 9.5H10C10.4062 9.5 10.75 9.84375 10.75 10.25C10.75 10.6875 10.4062 11 10 11H5.5Z\" fill=\"currentColor\"/>\n</svg>`\n};\nclass CourierIcon extends CourierBaseElement {\n constructor(color, svg) {\n super();\n // State\n __publicField(this, \"_color\");\n __publicField(this, \"_svg\");\n // Components\n __publicField(this, \"_iconContainer\");\n __publicField(this, \"_style\");\n this._color = color ?? CourierColors.black[500];\n this._svg = svg;\n const shadow = this.attachShadow({ mode: \"open\" });\n this._iconContainer = document.createElement(\"div\");\n shadow.appendChild(this._iconContainer);\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(this._color);\n shadow.appendChild(this._style);\n this.refresh();\n }\n static get id() {\n return \"courier-icon\";\n }\n getStyles(color) {\n return `\n :host {\n display: inline-block;\n line-height: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n svg {\n width: 24px;\n height: 24px;\n color: ${color};\n }\n `;\n }\n refresh() {\n if (this._svg) {\n this._iconContainer.innerHTML = this._svg;\n }\n if (this._color) {\n this._style.textContent = this.getStyles(this._color);\n }\n }\n updateColor(color) {\n this._color = color;\n this.refresh();\n }\n updateSVG(svg) {\n this._svg = svg;\n this.refresh();\n }\n}\nclass CourierLink extends CourierBaseElement {\n constructor() {\n super();\n __publicField(this, \"link\");\n const shadow = this.attachShadow({ mode: \"open\" });\n this.link = document.createElement(\"a\");\n this.link.setAttribute(\"part\", \"link\");\n const style = document.createElement(\"style\");\n style.textContent = `\n :host {\n display: inline-block;\n }\n\n a {\n text-decoration: none;\n border-radius: 4px;\n cursor: pointer;\n font-weight: 500;\n transition: all 0.2s ease;\n font-family: var(--courier-link-font-family, inherit);\n font-size: var(--courier-link-font-size, inherit);\n }\n\n /* Variants */\n a[data-variant=\"primary\"][data-mode=\"light\"] {\n color: var(--courier-link-color, ${theme.light.colors.link});\n }\n\n a[data-variant=\"primary\"][data-mode=\"light\"]:hover {\n opacity: 0.8;\n }\n\n a[data-variant=\"primary\"][data-mode=\"light\"]:active {\n opacity: 0.6;\n }\n\n a[data-variant=\"primary\"][data-mode=\"dark\"] {\n color: var(--courier-link-color, ${theme.dark.colors.link});\n }\n\n a[data-variant=\"primary\"][data-mode=\"dark\"]:hover {\n opacity: 0.8;\n }\n\n a[data-variant=\"primary\"][data-mode=\"dark\"]:active {\n opacity: 0.6;\n }\n\n a[data-underline=\"true\"] {\n text-decoration: underline;\n }\n\n a:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n }\n `;\n shadow.appendChild(style);\n shadow.appendChild(this.link);\n this.updateVariant();\n this.updateUnderline();\n this.updateMode();\n }\n static get id() {\n return \"courier-link\";\n }\n connectedCallback() {\n const slot = document.createElement(\"slot\");\n this.link.appendChild(slot);\n this.updateHref();\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case \"href\":\n this.updateHref();\n break;\n case \"variant\":\n case \"mode\":\n this.updateVariant();\n break;\n case \"disabled\":\n this.link.style.pointerEvents = this.hasAttribute(\"disabled\") ? \"none\" : \"auto\";\n this.link.style.opacity = this.hasAttribute(\"disabled\") ? \"0.6\" : \"1\";\n break;\n case \"color\":\n this.updateColor();\n break;\n case \"underline\":\n this.updateUnderline();\n break;\n case \"target\":\n this.updateTarget();\n break;\n case \"font-family\":\n this.updateFontFamily();\n break;\n case \"font-size\":\n this.updateFontSize();\n break;\n }\n }\n updateHref() {\n const href = this.getAttribute(\"href\");\n if (href) {\n this.link.href = href;\n }\n }\n updateVariant() {\n const variant = this.getAttribute(\"variant\") || \"primary\";\n const mode = this.getAttribute(\"mode\") || \"light\";\n this.link.setAttribute(\"data-variant\", variant);\n this.link.setAttribute(\"data-mode\", mode);\n }\n updateColor() {\n const color = this.getAttribute(\"color\");\n if (color) {\n this.link.style.setProperty(\"--courier-link-color\", color);\n } else {\n this.link.style.removeProperty(\"--courier-link-color\");\n }\n }\n updateUnderline() {\n const underline = this.getAttribute(\"underline\") === \"true\";\n this.link.setAttribute(\"data-underline\", underline.toString());\n }\n updateMode() {\n const mode = this.getAttribute(\"mode\") || \"light\";\n this.link.setAttribute(\"data-mode\", mode);\n }\n updateTarget() {\n const target = this.getAttribute(\"target\");\n if (target) {\n this.link.target = target;\n }\n }\n updateFontFamily() {\n const fontFamily = this.getAttribute(\"font-family\");\n if (fontFamily) {\n this.link.style.setProperty(\"--courier-link-font-family\", fontFamily);\n } else {\n this.link.style.removeProperty(\"--courier-link-font-family\");\n }\n }\n updateFontSize() {\n const fontSize = this.getAttribute(\"font-size\");\n if (fontSize) {\n this.link.style.setProperty(\"--courier-link-font-size\", fontSize);\n } else {\n this.link.style.removeProperty(\"--courier-link-font-size\");\n }\n }\n}\n__publicField(CourierLink, \"observedAttributes\", [\n \"href\",\n \"variant\",\n \"disabled\",\n \"color\",\n \"underline\",\n \"mode\",\n \"target\",\n \"font-family\",\n \"font-size\"\n]);\nclass CourierFactoryElement extends CourierSystemThemeElement {\n constructor() {\n super();\n }\n // Build the element with a factory function\n build(newElement) {\n if (newElement === null) {\n this.replaceChildren();\n return;\n }\n const element = newElement ?? this.defaultElement();\n this.replaceChildren(element);\n }\n // Default element to be used if no factory is provided\n defaultElement() {\n const element = document.createElement(\"div\");\n element.textContent = \"Default Element Factory\";\n element.style.cssText = `\n background-color: red;\n text-align: center;\n padding: 12px;\n `;\n return element;\n }\n}\nclass CourierInfoState extends CourierFactoryElement {\n constructor(props) {\n super();\n // Props\n __publicField(this, \"_props\");\n // Components\n __publicField(this, \"_title\");\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n // Callbacks\n __publicField(this, \"_buttonClickCallback\", null);\n this._props = props;\n }\n static get id() {\n return \"courier-info-state\";\n }\n defaultElement() {\n var _a, _b;\n const container = document.createElement(\"div\");\n this._title = document.createElement(\"h2\");\n if ((_a = this._props.title) == null ? void 0 : _a.text) {\n this._title.textContent = this._props.title.text;\n }\n this._button = new CourierButton(this._props.button ?? CourierButtonVariants.secondary(this.currentSystemTheme));\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(this._props);\n container.className = \"container\";\n container.appendChild(this._style);\n container.appendChild(this._title);\n container.appendChild(this._button);\n this.appendChild(container);\n (_b = this._button) == null ? void 0 : _b.addEventListener(\"click\", () => {\n if (this._buttonClickCallback) {\n this._buttonClickCallback();\n }\n });\n return container;\n }\n onSystemThemeChange(_) {\n this.updateStyles(this._props);\n }\n getStyles(props) {\n var _a, _b, _c, _d;\n return `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n }\n\n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n text-align: center;\n padding: 24px;\n box-sizing: border-box;\n height: 100%;\n }\n\n .container h2 {\n margin: 0;\n color: ${((_a = props.title) == null ? void 0 : _a.textColor) ?? \"red\"};\n font-size: ${((_b = props.title) == null ? void 0 : _b.fontSize) ?? \"16px\"};\n font-weight: ${((_c = props.title) == null ? void 0 : _c.fontWeight) ?? \"500\"};\n font-family: ${((_d = props.title) == null ? void 0 : _d.fontFamily) ?? \"inherit\"};\n }\n `;\n }\n updateStyles(props) {\n this._props = props;\n if (this._style) {\n this._style.textContent = this.getStyles(props);\n }\n if (this._button) {\n this._button.updateButton(props.button);\n }\n }\n setButtonClickCallback(callback) {\n this._buttonClickCallback = callback;\n }\n}\nclass CourierIconButton extends CourierBaseElement {\n constructor(svg, color, backgroundColor, hoverBackgroundColor, activeBackgroundColor, borderRadius, height, width) {\n super();\n // State\n __publicField(this, \"_backgroundColor\");\n __publicField(this, \"_hoverBackgroundColor\");\n __publicField(this, \"_activeBackgroundColor\");\n __publicField(this, \"_borderRadius\");\n __publicField(this, \"_height\");\n __publicField(this, \"_width\");\n // Elements\n __publicField(this, \"_style\");\n __publicField(this, \"_button\");\n __publicField(this, \"_icon\");\n this._borderRadius = borderRadius;\n this._backgroundColor = backgroundColor;\n this._hoverBackgroundColor = hoverBackgroundColor;\n this._activeBackgroundColor = activeBackgroundColor;\n this._height = height;\n this._width = width;\n const shadow = this.attachShadow({ mode: \"open\" });\n this._button = document.createElement(\"button\");\n this._button.setAttribute(\"part\", \"button\");\n this._icon = new CourierIcon(color, svg);\n this._style = document.createElement(\"style\");\n this.refresh();\n shadow.appendChild(this._style);\n this._button.appendChild(this._icon);\n shadow.appendChild(this._button);\n }\n static get id() {\n return \"courier-icon-button\";\n }\n refresh() {\n this._style.textContent = this.getStyles();\n }\n getStyles() {\n return `\n :host {\n display: inline-block;\n border-radius: ${this._borderRadius ?? \"50%\"};\n }\n\n button {\n border: none;\n border-radius: ${this._borderRadius ?? \"50%\"};\n cursor: pointer;\n width: ${this._width ?? \"36px\"};\n height: ${this._height ?? \"36px\"};\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${this._backgroundColor ?? \"transparent\"};\n transition: background-color 0.2s ease;\n touch-action: manipulation;\n }\n\n button:hover {\n background-color: ${this._hoverBackgroundColor ?? \"red\"};\n }\n\n button:active {\n background-color: ${this._activeBackgroundColor ?? \"red\"};\n }\n\n button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n [part=\"icon\"] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n }\n `;\n }\n updateIconColor(color) {\n this._icon.updateColor(color);\n }\n updateIconSVG(svg) {\n this._icon.updateSVG(svg);\n }\n updateBackgroundColor(color) {\n this._backgroundColor = color;\n this.refresh();\n }\n updateHoverBackgroundColor(color) {\n this._hoverBackgroundColor = color;\n this.refresh();\n }\n updateActiveBackgroundColor(color) {\n this._activeBackgroundColor = color;\n this.refresh();\n }\n}\nfunction registerElement(element) {\n if (typeof window !== \"undefined\" && !customElements.get(element.id)) {\n customElements.define(element.id, element);\n }\n}\nfunction injectGlobalStyle(styleId, styles) {\n const selector = `style[data-${styleId}]`;\n const existingStyle = document.querySelector(selector);\n if (!existingStyle) {\n const style = document.createElement(\"style\");\n style.setAttribute(`data-${styleId}`, \"\");\n style.textContent = styles;\n document.head.appendChild(style);\n return style;\n }\n return existingStyle;\n}\nregisterElement(CourierButton);\nregisterElement(CourierIcon);\nregisterElement(CourierLink);\nregisterElement(CourierInfoState);\nregisterElement(CourierIconButton);\nregisterElement(CourierSystemThemeElement);\nexport {\n CourierBaseElement,\n CourierButton,\n CourierButtonVariants,\n CourierColors,\n CourierFactoryElement,\n CourierIcon,\n CourierIconButton,\n CourierIconSVGs,\n CourierInfoState,\n CourierLink,\n CourierSystemThemeElement,\n addSystemThemeModeListener,\n getSystemThemeMode,\n injectGlobalStyle,\n registerElement,\n theme\n};\n//# sourceMappingURL=index.mjs.map\n","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 // 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 // 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 // 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 // Save original message and index\n const snapshot = this.getMessageSnapshot(message);\n\n if (snapshot.inboxIndex === undefined && snapshot.archiveIndex === undefined) {\n return;\n }\n\n if (snapshot.message.opened) {\n return;\n }\n\n try {\n message.opened = new Date().toISOString();\n this.applyMessageSnapshot(snapshot);\n if (canCallApi) {\n await Courier.shared.client?.inbox.open({ messageId: message.messageId });\n }\n } catch (error) {\n this.applyMessageSnapshot(snapshot);\n Courier.shared.client?.options.logger?.error('Error opening message:', error);\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\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._unreadCount !== undefined && !message.archived) {\n if (message.read) {\n this._unreadCount = Math.max(0, this._unreadCount - 1);\n }\n if (!message.read) {\n this._unreadCount = this._unreadCount + 1;\n }\n }\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\";\n\nexport class CourierInboxListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item';\n }\n\n // State\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\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 // 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\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n this._isMobile = 'ontouchstart' in window;\n this.render();\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._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 }\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: pointer;\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 /* Base hover / active */\n @media (hover: hover) {\n ${CourierInboxListItem.id}:hover {\n background-color: ${list?.item?.hoverBackgroundColor ?? 'red'};\n }\n }\n\n ${CourierInboxListItem.id}:active {\n background-color: ${list?.item?.activeBackgroundColor ?? 'red'};\n }\n\n /* Menu hover / active */\n @media (hover: hover) {\n ${CourierInboxListItem.id}: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}: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\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 setOnLongPress(cb: (message: InboxMessage) => void): void {\n this.onItemLongPress = cb;\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 // 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._message.actions.forEach(action => {\n // Create the action element\n const actionButton = new CourierButton({\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 { 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\";\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\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\n constructor(props: {\n themeManager: CourierInboxThemeManager,\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 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 private render(): void {\n\n // Remove all existing elements\n while (this.firstChild) {\n this.removeChild(this.firstChild);\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 const error = this.theme.inbox?.error;\n const errorElement = new CourierInfoState({\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 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 }\n });\n errorElement.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n errorElement.setButtonClickCallback(() => this.handleRetry());\n this.appendChild(errorElement);\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 const empty = this.theme.inbox?.empty;\n const emptyElement = new CourierInfoState({\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 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 }\n });\n emptyElement.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n emptyElement.setButtonClickCallback(() => this.handleRefresh());\n this.appendChild(emptyElement);\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\n const listItem = new CourierInboxListItem(this.theme);\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 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 // 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: 4px 8px;\n text-align: center;\n display: none;\n pointer-events: none;\n }\n\n ${CourierUnreadCountBadge.id} .button {\n background-color: ${theme.popup?.button?.unreadIndicator?.backgroundColor};\n color: ${theme.popup?.button?.unreadIndicator?.font?.color};\n border-radius: ${theme.popup?.button?.unreadIndicator?.borderRadius};\n font-size: ${theme.popup?.button?.unreadIndicator?.font?.size};\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 }\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 private updateBadge() {\n if (this._badge) {\n if (this._count > 0) {\n this._badge.textContent = 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 } from \"@trycourier/courier-ui-core\";\n\nexport type CourierInboxFontTheme = {\n family?: string;\n weight?: string;\n size?: string;\n color?: string;\n}\n\nexport type CourierInboxIconTheme = {\n color?: string;\n svg?: string;\n}\n\nexport type CourierInboxFilterItemTheme = {\n icon?: CourierInboxIconTheme;\n text?: string;\n}\n\nexport type CourierInboxUnreadIndicatorTheme = {\n font?: CourierInboxFontTheme;\n backgroundColor?: string;\n borderRadius?: string;\n}\n\nexport type CourierInboxIconButtonTheme = {\n icon?: CourierInboxIconTheme;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n}\n\nexport type CourierInboxButtonTheme = {\n font?: CourierInboxFontTheme;\n text?: string;\n shadow?: string;\n border?: string;\n borderRadius?: string;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n}\n\nexport type CourierInboxMenuButtonTheme = CourierInboxIconButtonTheme & {\n unreadIndicator?: CourierInboxUnreadIndicatorTheme;\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?: CourierInboxUnreadIndicatorTheme;\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 unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n size: '14px',\n family: undefined,\n weight: undefined\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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: '14px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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 unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n size: '14px',\n family: undefined,\n weight: undefined\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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: '14px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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 unreadIndicator: {\n ...defaultTheme.popup?.button?.unreadIndicator,\n ...theme.popup?.button?.unreadIndicator\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 { CourierComponentThemeMode, SystemThemeMode, addSystemThemeModeListener, getSystemThemeMode } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme, defaultDarkTheme, defaultLightTheme, mergeTheme } from \"./courier-inbox-theme\";\n\nexport interface CourierInboxThemeSubscription {\n manager: CourierInboxThemeManager;\n unsubscribe: () => void;\n}\n\nexport class CourierInboxThemeManager {\n\n // Event IDs\n private readonly THEME_CHANGE_EVENT: string = 'courier_inbox_theme_change';\n\n // State\n private _theme: CourierInboxTheme;\n private _lightTheme: CourierInboxTheme = defaultLightTheme;\n private _darkTheme: CourierInboxTheme = defaultDarkTheme;\n private _target: EventTarget;\n private _subscriptions: CourierInboxThemeSubscription[] = [];\n\n // System theme\n private _userMode: CourierComponentThemeMode;\n private _systemMode: SystemThemeMode;\n private _systemThemeCleanup: (() => void) | undefined;\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._lightTheme = theme;\n if (this._systemMode === 'light') {\n this.updateTheme();\n }\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._darkTheme = theme;\n if (this._systemMode === 'dark') {\n this.updateTheme();\n }\n }\n\n constructor(initialTheme: CourierInboxTheme) {\n this._theme = initialTheme;\n this._target = new EventTarget();\n this._userMode = 'system' as CourierComponentThemeMode;\n\n // Get the initial system theme\n this._systemMode = getSystemThemeMode();\n this.setLightTheme(defaultLightTheme);\n this.setDarkTheme(defaultDarkTheme);\n\n // Set up system theme listener\n this._systemThemeCleanup = addSystemThemeModeListener((mode: SystemThemeMode) => {\n this._systemMode = mode;\n this.updateTheme();\n });\n }\n\n /**\n * Get the current system theme\n */\n public get currentSystemTheme(): SystemThemeMode {\n return this._systemMode;\n }\n\n /**\n * Get the current theme\n */\n public getTheme() {\n return this._theme;\n }\n\n /**\n * Update the theme\n */\n private updateTheme() {\n\n // Use the user mode or fallback to the system mode\n const mode = this._userMode === 'system' ? this._systemMode : this._userMode;\n\n // Get the theme \n const theme = mode === 'light' ? this._lightTheme : this._darkTheme;\n\n // Merge the theme\n const mergedTheme = mergeTheme(mode, theme);\n\n // Set the theme\n this.setTheme(mergedTheme);\n }\n\n /**\n * Set the theme and notify all listeners\n */\n private setTheme(theme: CourierInboxTheme) {\n if (theme === this._theme) return;\n this._theme = theme;\n this._target.dispatchEvent(new CustomEvent(this.THEME_CHANGE_EVENT, {\n detail: { theme }\n }));\n }\n\n /**\n * Set the mode and notify all listeners\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._userMode = mode;\n this.updateTheme();\n }\n\n /**\n * Subscribe to theme changes\n * @param {Function} callback - Function to run when the theme changes\n * @returns {CourierInboxThemeSubscription} - Object with remove method to stop listening\n */\n subscribe(callback: (theme: CourierInboxTheme) => void): CourierInboxThemeSubscription {\n const controller = new AbortController();\n this._target.addEventListener(this.THEME_CHANGE_EVENT, ((e: Event) => {\n callback((e as CustomEvent<{ theme: CourierInboxTheme }>).detail.theme);\n }) as EventListener, { signal: controller.signal });\n\n const subscription: CourierInboxThemeSubscription = {\n manager: this,\n unsubscribe: () => {\n controller.abort();\n const index = this._subscriptions.indexOf(subscription);\n if (index > -1) {\n this._subscriptions.splice(index, 1);\n }\n }\n };\n\n this._subscriptions.push(subscription);\n return subscription;\n }\n\n /**\n * Clean up event listeners\n */\n public cleanup() {\n if (this._systemThemeCleanup) {\n this._systemThemeCleanup();\n }\n this._subscriptions.forEach(subscription => subscription.unsubscribe());\n this._subscriptions = [];\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 // Theming\n private _themeManager: CourierInboxThemeManager;\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\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: '768px'\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 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 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 public setHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._headerFactory = factory;\n this.updateHeader();\n }\n\n public removeHeader() {\n this._headerFactory = null;\n this.updateHeader();\n }\n\n public setLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setLoadingStateFactory(factory);\n }\n\n public setEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setEmptyStateFactory(factory);\n }\n\n public setErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setErrorStateFactory(factory);\n }\n\n public setListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setListItemFactory(factory);\n }\n\n public setPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setPaginationItemFactory(factory);\n }\n\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageClick = handler;\n }\n\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._onMessageActionClick = handler;\n }\n\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageLongPress = handler;\n }\n\n public setFeedType(feedType: CourierInboxFeedType) {\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 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 { CourierUnreadCountBadge } from \"./courier-unread-count-badge\";\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 _unreadCountBadge?: CourierUnreadCountBadge;\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 count badge\n this._unreadCountBadge = new CourierUnreadCountBadge({\n themeBus: this._themeSubscription.manager,\n location: 'button'\n });\n this._unreadCountBadge.id = 'unread-badge';\n\n this._container.appendChild(this._triggerButton);\n this._container.appendChild(this._unreadCountBadge);\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: -8px;\n left: 50%;\n pointer-events: none;\n }\n `;\n }\n\n public onUnreadCountChange(unreadCount: number): void {\n this._unreadCountBadge?.setCount(unreadCount);\n this.refreshTheme();\n }\n\n private refreshTheme() {\n\n // Trigger button\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 // Unread count badge\n this._unreadCountBadge?.refreshTheme('button');\n\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-right';\n private _top: string = '40px';\n private _right: string = '0';\n private _bottom: string = '40px';\n private _left: string = '0';\n\n // Theming\n private _themeManager = new CourierInboxThemeManager(defaultLightTheme);\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\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 public onUnreadCountChange(_: number): void {\n this.render();\n }\n\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageClick(handler);\n }\n\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._inbox?.onMessageActionClick(handler);\n }\n\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageLongPress(handler);\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;\n this._popup.style.right = this._right;\n break;\n case 'top-left':\n this._popup.style.top = this._top;\n this._popup.style.left = this._left;\n break;\n case 'top-center':\n this._popup.style.top = this._top;\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;\n this._popup.style.right = this._right;\n break;\n case 'bottom-left':\n this._popup.style.bottom = this._bottom;\n this._popup.style.left = this._left;\n break;\n case 'bottom-center':\n this._popup.style.bottom = this._bottom;\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;\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;\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 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 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 public setContent(element: HTMLElement) {\n if (!this._inbox) return;\n this._inbox.innerHTML = '';\n this._inbox.appendChild(element);\n }\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 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 public setFeedType(feedType: CourierInboxFeedType) {\n this._inbox?.setFeedType(feedType);\n }\n\n // Factory methods\n public setPopupHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setHeader(factory);\n }\n\n public removePopupHeader() {\n this._inbox?.removeHeader();\n }\n\n public setPopupLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setLoadingState(factory);\n }\n\n public setPopupEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setEmptyState(factory);\n }\n\n public setPopupErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setErrorState(factory);\n }\n\n public setPopupListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setListItem(factory);\n }\n\n public setPopupPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setPaginationItem(factory);\n }\n\n public setPopupMenuButton(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","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","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"],"names":["_isInitialised","__defProp","Object","defineProperty","__typeError","msg","TypeError","__publicField","obj","key","value","enumerable","configurable","writable","__defNormalProp","__accessCheck","member","has","__privateSet","setter","set","CourierColors","theme","light","colors","primary","secondary","border","link","icon","button","cornerRadius","dark","getSystemThemeMode","window","matchMedia","matches","addSystemThemeModeListener","callback","mediaQuery","handler","e","addEventListener","removeEventListener","HTMLElementBase","HTMLElement","CourierBaseElement","constructor","super","arguments","this","WeakSet","add","id","connectedCallback","_a","get","onComponentMounted","call","disconnectedCallback","onComponentUnmounted","WeakMap","CourierSystemThemeElement","_currentSystemTheme","_systemThemeCleanup","mode","onSystemThemeChange","currentSystemTheme","_","baseButtonStyles","borderRadius","fontSize","CourierButtonVariants","backgroundColor","textColor","fontWeight","shadow","CourierButton","props","attachShadow","_button","document","createElement","setAttribute","_style","textContent","getStyles","appendChild","updateButton","preventDefault","stopPropagation","onClick","defaultBorderRadius","defaultFontWeight","fontFamily","defaultFontSize","defaultBackgroundColor","defaultTextColor","defaultBorder","defaultShadow","hoverBackgroundColor","activeBackgroundColor","text","CourierIconSVGs","inbox","archive","check","filter","overflow","read","archiveRead","unread","unarchive","CourierIcon","color","svg","_color","_svg","_iconContainer","refresh","innerHTML","updateColor","updateSVG","CourierLink","style","updateVariant","updateUnderline","updateMode","slot","updateHref","attributeChangedCallback","name","oldValue","newValue","pointerEvents","hasAttribute","opacity","updateTarget","updateFontFamily","updateFontSize","href","getAttribute","variant","setProperty","removeProperty","underline","toString","target","CourierFactoryElement","build","newElement","replaceChildren","element","defaultElement","cssText","CourierInfoState","_props","_b","container","_title","title","className","_buttonClickCallback","updateStyles","_c","_d","setButtonClickCallback","CourierIconButton","height","width","_borderRadius","_backgroundColor","_hoverBackgroundColor","_activeBackgroundColor","_height","_width","_icon","updateIconColor","updateIconSVG","updateBackgroundColor","updateHoverBackgroundColor","updateActiveBackgroundColor","registerElement","customElements","define","injectGlobalStyle","styleId","styles","selector","existingStyle","querySelector","head","copyMessage","message","copy","actions","map","action","data","JSON","parse","stringify","copyInboxAction","tags","trackingIds","copyInboxDataSet","dataSet","messages","CourierInboxListItemMenu","_theme","menu","list","item","setOptions","options","_options","renderMenu","menuTheme","cancelEvent","forEach","opt","handleInteraction","show","display","classList","hide","remove","_CourierInboxDatastore","shared","instance","unreadCount","_unreadCount","inboxDataSet","_inboxDataSet","feedType","canPaginate","paginationCursor","archiveDataSet","_archiveDataSet","addDataStoreListener","listener","_dataStoreListeners","push","removeDataStoreListener","l","fetchCachableDataSet","canUseCache","response","fetch","nodes","_e","pageInfo","hasNextPage","_h","_f","_g","startCursor","fetchUnreadCount","Courier","client","getUnreadMessageCount","load","userId","Error","properties","Promise","all","getMessages","getArchivedMessages","events","onDataSetChange","onUnreadCountChange","error","courierJs","logger","onError","listenForUpdates","connectSocket","socket","info","isConnecting","isOpen","connectionId","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","connect","_k","_j","find","m","fetchNextPageOfMessages","isPaginatingInbox","paginationLimit","_i","addPage","_l","isPaginatingArchive","_m","_p","_o","_s","_q","_r","_v","_t","_u","_x","_w","canMutate","datastoreSnapshot","getDatastoreSnapshot","snapshot","getMessageSnapshot","Date","toISOString","applyMessageSnapshot","applyDatastoreSnapshot","inboxIndex","archiveIndex","opened","open","clickTrackingId","click","trackingId","messageSnapshot","archived","removeMessage","insertIndex","findInsertIndex","timestamp","findIndex","splice","archiveAll","readAll","newMessage","i","length","created","onPageAdded","index","onMessageAdd","onMessageRemove","updateMessage","Math","max","onMessageUpdate","CourierInboxDatastore","CourierInboxListItem","_isMobile","render","contentContainer","_titleElement","_subtitleElement","_actionsContainer","_timeElement","_unreadIndicator","_menu","_getMenuOptions","append","cancelPropagation","contains","composedPath","includes","_message","onItemClick","_isLongPress","_setupHoverBehavior","_setupLongPressBehavior","divider","unreadIndicatorColor","family","size","_n","subtitle","time","_z","_y","_showMenu","_hideMenu","enabled","longPress","_longPressTimeout","setTimeout","onItemLongPress","navigator","vibrate","vibrationDuration","displayDuration","passive","clearTimeout","setOnLongPress","cb","isArchiveFeed","_feedType","setMessage","_updateContent","setOnItemClick","setOnItemActionClick","onItemActionClick","setOnItemLongPress","toggle","preview","body","now","messageDate","diffInSeconds","floor","getTime","getMessageTime","hasActions","actionsTheme","actionButton","content","font","weight","CourierInboxSkeletonListItem","firstRow","CourierSkeletonAnimatedRow","secondRow","thirdRow","skeletonItem","loading","animation","barColor","hexColor","r","parseInt","slice","g","b","colorWithAlpha80","colorWithAlpha40","barHeight","duration","barBorderRadius","CourierInboxSkeletonList","CourierInboxPaginationListItem","_customItem","customItem","_onPaginationTrigger","onPaginationTrigger","_skeletonLoadingList","_observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","CourierInboxList","_onRefresh","onRefresh","_onMessageClick","onMessageClick","_onMessageActionClick","onMessageActionClick","_onMessageLongPress","onMessageLongPress","_themeSubscription","themeManager","subscribe","_messages","manager","getTheme","_listStyles","_listItemStyles","_listItemMenuStyles","unsubscribe","setDataSet","_canPaginate","Boolean","_error","_isLoading","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","firstChild","removeChild","errorElement","_errorStateFactory","loadingElement","_A","_loadingStateFactory","empty","_B","emptyElement","_C","_E","_D","_G","_F","_I","_H","_K","_J","_L","_M","_N","_O","_Q","_P","_S","_R","_U","_T","_W","_V","_X","_Y","_Z","__","_emptyStateFactory","_listItemFactory","listItem","paginationItem","_$","_paginationItemFactory","setLoadingStateFactory","factory","setEmptyStateFactory","setErrorStateFactory","setListItemFactory","setPaginationItemFactory","CourierInboxOptionMenuItem","_option","option","_isSelected","isSelected","_isSelectedable","selectable","_content","_itemIcon","spacer","_selectionIcon","refreshTheme","selectionIcon","CourierInboxOptionMenu","type","onMenuOpen","_type","_selectable","_selectedIndex","_onMenuOpen","_menuButton","toggleMenu","bind","handleOutsideClick","header","menus","popup","_aa","isFilter","buttonConfig","filters","defaultIcon","refreshMenuItems","menuItem","closeMenu","isOpening","selectOption","o","CourierUnreadCountBadge","_location","location","themeBus","_badge","updateBadge","unreadIndicator","setCount","count","_count","CourierInboxHeaderTitle","_iconElement","_unreadBadge","updateFilter","updateSelectedOption","CourierInboxHeader","_onFeedTypeChange","onFeedTypeChange","observedAttributes","onComponentUmounted","getFilterOptions","filterMenu","handleOptionMenuItemClick","getActionOptions","actionMenu","markAllRead","_filterMenu","_actionMenu","_titleSection","filterOptions","headerContent","CourierInboxDataStoreListener","defaultLightTheme","defaultDarkTheme","mergeTheme","defaultTheme","_ba","_ea","_da","_ca","_ha","_ga","_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","_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","_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","_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","initialTheme","_target","EventTarget","_userMode","_systemMode","setLightTheme","setDarkTheme","updateTheme","_lightTheme","_darkTheme","mergedTheme","setTheme","dispatchEvent","CustomEvent","THEME_CHANGE_EVENT","detail","setMode","controller","AbortController","signal","subscription","abort","_subscriptions","indexOf","cleanup","CourierInbox","_currentFeed","_themeManager","_inboxStyle","_unreadIndicatorStyle","_header","_list","async","bubbles","composed","_datastoreListener","updateHeader","_authListener","addAuthenticationListener","_defaultProps","setHeader","_headerFactory","removeHeader","setLoadingState","setEmptyState","setErrorState","setListItem","setPaginationItem","messageCount","headerElement","Function","CourierInboxMenuButton","_container","_triggerButton","_unreadCountBadge","CourierInboxPopupMenu","_popup","SAFE_SELECTORS","some","node","sel","_inbox","togglePopup","updatePopupPosition","isValidPosition","_popupAlignment","setSize","_top","_right","_bottom","_left","top","bottom","left","right","margin","transform","isVisible","setContent","setPosition","position","setPopupHeader","removePopupHeader","setPopupLoadingState","setPopupEmptyState","setPopupErrorState","setPopupListItem","setPopupPaginationItem","setPopupMenuButton","_popupMenuButtonFactory","customButton","___"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../courier-ui-core/dist/index.mjs","../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/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/datastore/datatore-events.ts","../src/utils/extensions.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __typeError = (msg) => {\n throw TypeError(msg);\n};\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __accessCheck = (obj, member, msg) => member.has(obj) || __typeError(\"Cannot \" + msg);\nvar __privateGet = (obj, member, getter) => (__accessCheck(obj, member, \"read from private field\"), getter ? getter.call(obj) : member.get(obj));\nvar __privateAdd = (obj, member, value) => member.has(obj) ? __typeError(\"Cannot add the same private member more than once\") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\nvar __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, \"write to private field\"), setter ? setter.call(obj, value) : member.set(obj, value), value);\nvar _isInitialised;\nconst CourierColors = {\n black: {\n 400: \"#0A0A0A\",\n 500: \"#171717\",\n 50010: \"#1717171A\",\n 50020: \"#17171733\"\n },\n gray: {\n 200: \"#F5F5F5\",\n 400: \"#3A3A3A\",\n 500: \"#E5E5E5\",\n 600: \"#737373\"\n },\n white: {\n 500: \"#FFFFFF\",\n 50010: \"#FFFFFF1A\",\n 50020: \"#FFFFFF33\"\n },\n blue: {\n 400: \"#60A5FA\",\n 500: \"#2563EB\"\n }\n};\nconst theme = {\n light: {\n colors: {\n primary: CourierColors.black[500],\n secondary: CourierColors.white[500],\n border: CourierColors.gray[500],\n link: CourierColors.blue[500],\n icon: CourierColors.black[500]\n },\n button: {\n cornerRadius: \"4px\"\n }\n },\n dark: {\n colors: {\n primary: CourierColors.white[500],\n secondary: CourierColors.black[500],\n border: CourierColors.gray[400],\n link: CourierColors.blue[400],\n icon: CourierColors.white[500]\n },\n button: {\n cornerRadius: \"4px\"\n }\n }\n};\nconst getSystemThemeMode = () => {\n if (typeof window === \"undefined\") {\n return \"light\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n};\nconst addSystemThemeModeListener = (callback) => {\n if (typeof window === \"undefined\") {\n return () => {\n };\n }\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = (e) => {\n callback(e.matches ? \"dark\" : \"light\");\n };\n mediaQuery.addEventListener(\"change\", handler);\n return () => {\n mediaQuery.removeEventListener(\"change\", handler);\n };\n};\nconst HTMLElementBase = (() => {\n try {\n return typeof HTMLElement === \"undefined\" ? class {\n } : HTMLElement;\n } catch {\n return class {\n };\n }\n})();\nclass CourierBaseElement extends HTMLElementBase {\n constructor() {\n super(...arguments);\n /** Prevents double-initialisation when the node is re-inserted. */\n __privateAdd(this, _isInitialised, false);\n }\n /** Tag-name you’ll use in `customElements.define()` */\n static get id() {\n return \"courier-base-element\";\n }\n /* ------------------------------------------------------------------ */\n /* Custom-elements lifecycle hooks */\n /* ------------------------------------------------------------------ */\n connectedCallback() {\n var _a;\n if (__privateGet(this, _isInitialised)) return;\n __privateSet(this, _isInitialised, true);\n (_a = this.onComponentMounted) == null ? void 0 : _a.call(this);\n }\n disconnectedCallback() {\n var _a;\n __privateSet(this, _isInitialised, false);\n (_a = this.onComponentUnmounted) == null ? void 0 : _a.call(this);\n }\n /* ------------------------------------------------------------------ */\n /* Overridable hooks */\n /* ------------------------------------------------------------------ */\n /** Called **once** when the element first becomes part of the DOM. */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onComponentMounted() {\n }\n /** Called when the element is removed from the DOM. */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onComponentUnmounted() {\n }\n}\n_isInitialised = new WeakMap();\nclass CourierSystemThemeElement extends CourierBaseElement {\n constructor() {\n super();\n // State\n __publicField(this, \"_currentSystemTheme\");\n // System theme\n __publicField(this, \"_systemThemeCleanup\");\n this._currentSystemTheme = getSystemThemeMode();\n this._systemThemeCleanup = addSystemThemeModeListener((mode) => {\n this._currentSystemTheme = mode;\n this.onSystemThemeChange(mode);\n });\n }\n static get id() {\n return \"courier-system-theme-element\";\n }\n get currentSystemTheme() {\n return this._currentSystemTheme;\n }\n onComponentUnmounted() {\n var _a;\n (_a = this._systemThemeCleanup) == null ? void 0 : _a.call(this);\n super.onComponentUnmounted();\n }\n onSystemThemeChange(_) {\n }\n}\nconst baseButtonStyles = {\n borderRadius: \"4px\",\n fontSize: \"14px\"\n};\nconst CourierButtonVariants = {\n primary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.primary,\n textColor: theme[mode].colors.secondary,\n fontWeight: \"500\",\n shadow: \"none\"\n }),\n secondary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.secondary,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: `1px solid ${theme[mode].colors.border}`,\n shadow: mode === \"light\" ? \"0px 1px 2px 0px rgba(0, 0, 0, 0.06)\" : \"0px 1px 2px 0px rgba(255, 255, 255, 0.1)\"\n }),\n tertiary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.border,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: \"none\",\n shadow: \"none\"\n })\n};\nclass CourierButton extends CourierSystemThemeElement {\n constructor(props) {\n super();\n // Components\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n const shadow = this.attachShadow({ mode: \"open\" });\n this._button = document.createElement(\"button\");\n this._button.setAttribute(\"part\", \"button\");\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(props);\n shadow.appendChild(this._style);\n shadow.appendChild(this._button);\n this.updateButton(props);\n this._button.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (props.onClick) {\n props.onClick();\n }\n });\n }\n static get id() {\n return \"courier-button\";\n }\n getStyles(props) {\n const defaultTextColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.textColor;\n };\n const defaultBackgroundColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.backgroundColor;\n };\n const defaultBorder = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.border;\n };\n const defaultShadow = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.shadow;\n };\n const defaultBorderRadius = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.borderRadius;\n };\n const defaultFontSize = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontSize;\n };\n const defaultFontWeight = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontWeight;\n };\n return `\n :host {\n display: inline-block;\n }\n\n button {\n border: none;\n border-radius: ${props.borderRadius ?? defaultBorderRadius()};\n font-weight: ${props.fontWeight ?? defaultFontWeight()};\n font-family: ${props.fontFamily ?? \"inherit\"};\n font-size: ${props.fontSize ?? defaultFontSize()};\n padding: 6px 10px;\n cursor: pointer;\n width: 100%;\n height: 100%;\n background-color: ${props.backgroundColor ?? defaultBackgroundColor()};\n color: ${props.textColor ?? defaultTextColor()};\n border: ${props.border ?? defaultBorder()};\n box-shadow: ${props.shadow ?? defaultShadow()};\n touch-action: manipulation;\n }\n\n button:hover {\n ${props.hoverBackgroundColor ? `background-color: ${props.hoverBackgroundColor};` : \"filter: brightness(0.9);\"}\n }\n\n button:active {\n ${props.activeBackgroundColor ? `background-color: ${props.activeBackgroundColor};` : \"filter: brightness(0.8);\"}\n }\n\n button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `;\n }\n updateButton(props) {\n if (props.text) {\n this._button.textContent = props.text;\n }\n this._style.textContent = this.getStyles(props);\n }\n}\nconst CourierIconSVGs = {\n inbox: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 14.5V17C5.5 17.2812 5.71875 17.5 6 17.5H18C18.25 17.5 18.5 17.2812 18.5 17V14.5H15.9375L15.2812 15.8125C15.0938 16.25 14.6562 16.5 14.1875 16.5H9.78125C9.3125 16.5 8.875 16.25 8.6875 15.8125L8.03125 14.5H5.5ZM18.1875 13L16.6562 6.90625C16.5938 6.65625 16.4062 6.5 16.1875 6.5H7.8125C7.5625 6.5 7.375 6.65625 7.3125 6.90625L5.78125 13H8.1875C8.65625 13 9.09375 13.2812 9.3125 13.7188L9.9375 15H14.0312L14.6875 13.7188C14.875 13.2812 15.3125 13 15.7812 13H18.1875ZM4 14.25C4 14.0938 4 13.9375 4.03125 13.7812L5.84375 6.53125C6.09375 5.625 6.875 5 7.8125 5H16.1875C17.0938 5 17.9062 5.625 18.125 6.53125L19.9375 13.7812C19.9688 13.9375 20 14.0938 20 14.25V17C20 18.125 19.0938 19 18 19H6C4.875 19 4 18.125 4 17V14.25Z\" fill=\"currentColor\"/>\n</svg>`,\n archive: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 6.5V8H18.5V6.5H5.5ZM5 5H19C19.5312 5 20 5.46875 20 6V8.5C20 9.0625 19.5312 9.5 19 9.5H5C4.4375 9.5 4 9.0625 4 8.5V6C4 5.46875 4.4375 5 5 5ZM9 11.75C9 11.3438 9.3125 11 9.75 11H14.25C14.6562 11 15 11.3438 15 11.75C15 12.1875 14.6562 12.5 14.25 12.5H9.75C9.3125 12.5 9 12.1875 9 11.75ZM5 17V10.5H6.5V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V10.5H19V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17Z\" fill=\"currentColor\"/>\n</svg>`,\n check: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.793 7.33203C19.0742 7.64453 19.0742 8.11328 18.793 8.39453L10.543 16.6445C10.2305 16.957 9.76172 16.957 9.48047 16.6445L5.23047 12.3945C4.91797 12.1133 4.91797 11.6445 5.23047 11.3633C5.51172 11.0508 5.98047 11.0508 6.26172 11.3633L9.98047 15.082L17.7305 7.33203C18.0117 7.05078 18.4805 7.05078 18.7617 7.33203H18.793Z\" fill=\"currentColor\"/>\n</svg>`,\n filter: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5 7C5 6.59375 5.3125 6.25 5.75 6.25H18.25C18.6562 6.25 19 6.59375 19 7C19 7.4375 18.6562 7.75 18.25 7.75H5.75C5.3125 7.75 5 7.4375 5 7ZM7 12C7 11.5938 7.3125 11.25 7.75 11.25H16.25C16.6562 11.25 17 11.5938 17 12C17 12.4375 16.6562 12.75 16.25 12.75H7.75C7.3125 12.75 7 12.4375 7 12ZM14 17C14 17.4375 13.6562 17.75 13.25 17.75H10.75C10.3125 17.75 10 17.4375 10 17C10 16.5938 10.3125 16.25 10.75 16.25H13.25C13.6562 16.25 14 16.5938 14 17Z\" fill=\"currentColor\"/>\n</svg>`,\n right: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.75 12.547L13.25 17.797C12.9375 18.0783 12.4688 18.0783 12.1875 17.7658C11.9062 17.4533 11.9062 16.9845 12.2188 16.7033L16.375 12.7345H5.75C5.3125 12.7345 5 12.422 5 11.9845C5 11.5783 5.3125 11.2345 5.75 11.2345H16.375L12.2188 7.29703C11.9062 7.01578 11.9062 6.51578 12.1875 6.23453C12.4688 5.92203 12.9688 5.92203 13.25 6.20328L18.75 11.4533C18.9062 11.6095 19 11.797 19 11.9845C19 12.2033 18.9062 12.3908 18.75 12.547Z\" fill=\"currentColor\"/>\n</svg>`,\n remove: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.7969 8.27344L13.0469 12.0234L16.7656 15.7422C17.0781 16.0234 17.0781 16.4922 16.7656 16.7734C16.4844 17.0859 16.0156 17.0859 15.7344 16.7734L11.9844 13.0547L8.26562 16.7734C7.98438 17.0859 7.51562 17.0859 7.23438 16.7734C6.92188 16.4922 6.92188 16.0234 7.23438 15.7109L10.9531 11.9922L7.23438 8.27344C6.92188 7.99219 6.92188 7.52344 7.23438 7.21094C7.51562 6.92969 7.98438 6.92969 8.29688 7.21094L12.0156 10.9609L15.7344 7.24219C16.0156 6.92969 16.4844 6.92969 16.7969 7.24219C17.0781 7.52344 17.0781 7.99219 16.7969 8.27344Z\" fill=\"currentColor\"/>\n</svg>`,\n overflow: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.5117 11.9883C18.5117 12.5508 18.1992 13.0195 17.7617 13.3008C17.293 13.582 16.6992 13.582 16.2617 13.3008C15.793 13.0195 15.5117 12.5508 15.5117 11.9883C15.5117 11.457 15.793 10.9883 16.2617 10.707C16.6992 10.4258 17.293 10.4258 17.7617 10.707C18.1992 10.9883 18.5117 11.457 18.5117 11.9883ZM13.5117 11.9883C13.5117 12.5508 13.1992 13.0195 12.7617 13.3008C12.293 13.582 11.6992 13.582 11.2617 13.3008C10.793 13.0195 10.5117 12.5508 10.5117 11.9883C10.5117 11.457 10.793 10.9883 11.2617 10.707C11.6992 10.4258 12.293 10.4258 12.7617 10.707C13.1992 10.9883 13.5117 11.457 13.5117 11.9883ZM7.01172 13.4883C6.44922 13.4883 5.98047 13.207 5.69922 12.7383C5.41797 12.3008 5.41797 11.707 5.69922 11.2383C5.98047 10.8008 6.44922 10.4883 7.01172 10.4883C7.54297 10.4883 8.01172 10.8008 8.29297 11.2383C8.57422 11.707 8.57422 12.3008 8.29297 12.7383C8.01172 13.207 7.54297 13.4883 7.01172 13.4883Z\" fill=\"currentColor\"/>\n</svg>`,\n read: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7 6.5C6.71875 6.5 6.5 6.75 6.5 7V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V7C17.5 6.75 17.25 6.5 17 6.5H7ZM5 7C5 5.90625 5.875 5 7 5H17C18.0938 5 19 5.90625 19 7V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17V7ZM15.5312 10.5312L11.5312 14.5312C11.2188 14.8438 10.75 14.8438 10.4688 14.5312L8.46875 12.5312C8.15625 12.25 8.15625 11.7812 8.46875 11.5C8.75 11.1875 9.21875 11.1875 9.53125 11.5L11 12.9688L14.4688 9.46875C14.75 9.1875 15.2188 9.1875 15.5 9.46875C15.8125 9.78125 15.8125 10.25 15.5 10.5312H15.5312Z\" fill=\"currentColor\"/>\n</svg>`,\n archiveRead: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.5 6.5V15.25H16.5V6.5H7.5ZM6 15.25V6.5C6 5.6875 6.65625 5 7.5 5H16.5C17.3125 5 18 5.6875 18 6.5V15.25C18.4062 15.25 18.75 15.5938 18.75 16C18.75 16.4375 18.4062 16.75 18 16.75H6C5.5625 16.75 5.25 16.4375 5.25 16C5.25 15.5938 5.5625 15.25 6 15.25ZM5 13V14.5H4.5V17.5H19.5V14.5H19V13H19.5C20.3125 13 21 13.6875 21 14.5V17.5C21 18.3438 20.3125 19 19.5 19H4.5C3.65625 19 3 18.3438 3 17.5V14.5C3 13.6875 3.65625 13 4.5 13H5ZM15.0312 9.625L11.6875 12.9688C11.5312 13.0938 11.3438 13.1875 11.1562 13.1875C10.9375 13.1875 10.75 13.0938 10.625 12.9688L8.96875 11.2812C8.65625 11 8.65625 10.5312 8.96875 10.25C9.25 9.9375 9.71875 9.9375 10 10.25L11.1562 11.375L13.9688 8.5625C14.25 8.28125 14.7188 8.28125 15 8.5625C15.3125 8.875 15.3125 9.34375 15 9.625H15.0312Z\" fill=\"currentColor\"/>\n</svg>`,\n unread: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M17 6.5H7C6.71875 6.5 6.5 6.75 6.5 7V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V7C17.5 6.75 17.25 6.5 17 6.5ZM7 5H17C18.0938 5 19 5.90625 19 7V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17V7C5 5.90625 5.875 5 7 5Z\" fill=\"currentColor\"/>\n</svg>`,\n unarchive: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 11C5.0625 11 4.75 10.6875 4.75 10.25V5.75C4.75 5.34375 5.0625 5 5.5 5C5.90625 5 6.25 5.34375 6.25 5.75V8.28125L6.875 7.53125C8.15625 6 10.0625 5 12.25 5C16.0938 5 19.25 8.15625 19.25 12C19.25 15.875 16.0938 19 12.25 19C10.6562 19 9.21875 18.5 8.03125 17.625C7.71875 17.375 7.625 16.9062 7.875 16.5625C8.125 16.2188 8.59375 16.1562 8.9375 16.4062C9.84375 17.0938 11 17.5 12.25 17.5C15.2812 17.5 17.75 15.0625 17.75 12C17.75 8.96875 15.2812 6.5 12.25 6.5C10.5312 6.5 9.03125 7.28125 8 8.5L7.15625 9.5H10C10.4062 9.5 10.75 9.84375 10.75 10.25C10.75 10.6875 10.4062 11 10 11H5.5Z\" fill=\"currentColor\"/>\n</svg>`\n};\nclass CourierIcon extends CourierBaseElement {\n constructor(color, svg) {\n super();\n // State\n __publicField(this, \"_color\");\n __publicField(this, \"_svg\");\n // Components\n __publicField(this, \"_iconContainer\");\n __publicField(this, \"_style\");\n this._color = color ?? CourierColors.black[500];\n this._svg = svg;\n const shadow = this.attachShadow({ mode: \"open\" });\n this._iconContainer = document.createElement(\"div\");\n shadow.appendChild(this._iconContainer);\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(this._color);\n shadow.appendChild(this._style);\n this.refresh();\n }\n static get id() {\n return \"courier-icon\";\n }\n getStyles(color) {\n return `\n :host {\n display: inline-block;\n line-height: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n svg {\n width: 24px;\n height: 24px;\n color: ${color};\n }\n `;\n }\n refresh() {\n if (this._svg) {\n this._iconContainer.innerHTML = this._svg;\n }\n if (this._color) {\n this._style.textContent = this.getStyles(this._color);\n }\n }\n updateColor(color) {\n this._color = color;\n this.refresh();\n }\n updateSVG(svg) {\n this._svg = svg;\n this.refresh();\n }\n}\nclass CourierLink extends CourierBaseElement {\n constructor() {\n super();\n __publicField(this, \"link\");\n const shadow = this.attachShadow({ mode: \"open\" });\n this.link = document.createElement(\"a\");\n this.link.setAttribute(\"part\", \"link\");\n const style = document.createElement(\"style\");\n style.textContent = `\n :host {\n display: inline-block;\n }\n\n a {\n text-decoration: none;\n border-radius: 4px;\n cursor: pointer;\n font-weight: 500;\n transition: all 0.2s ease;\n font-family: var(--courier-link-font-family, inherit);\n font-size: var(--courier-link-font-size, inherit);\n }\n\n /* Variants */\n a[data-variant=\"primary\"][data-mode=\"light\"] {\n color: var(--courier-link-color, ${theme.light.colors.link});\n }\n\n a[data-variant=\"primary\"][data-mode=\"light\"]:hover {\n opacity: 0.8;\n }\n\n a[data-variant=\"primary\"][data-mode=\"light\"]:active {\n opacity: 0.6;\n }\n\n a[data-variant=\"primary\"][data-mode=\"dark\"] {\n color: var(--courier-link-color, ${theme.dark.colors.link});\n }\n\n a[data-variant=\"primary\"][data-mode=\"dark\"]:hover {\n opacity: 0.8;\n }\n\n a[data-variant=\"primary\"][data-mode=\"dark\"]:active {\n opacity: 0.6;\n }\n\n a[data-underline=\"true\"] {\n text-decoration: underline;\n }\n\n a:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n }\n `;\n shadow.appendChild(style);\n shadow.appendChild(this.link);\n this.updateVariant();\n this.updateUnderline();\n this.updateMode();\n }\n static get id() {\n return \"courier-link\";\n }\n connectedCallback() {\n const slot = document.createElement(\"slot\");\n this.link.appendChild(slot);\n this.updateHref();\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case \"href\":\n this.updateHref();\n break;\n case \"variant\":\n case \"mode\":\n this.updateVariant();\n break;\n case \"disabled\":\n this.link.style.pointerEvents = this.hasAttribute(\"disabled\") ? \"none\" : \"auto\";\n this.link.style.opacity = this.hasAttribute(\"disabled\") ? \"0.6\" : \"1\";\n break;\n case \"color\":\n this.updateColor();\n break;\n case \"underline\":\n this.updateUnderline();\n break;\n case \"target\":\n this.updateTarget();\n break;\n case \"font-family\":\n this.updateFontFamily();\n break;\n case \"font-size\":\n this.updateFontSize();\n break;\n }\n }\n updateHref() {\n const href = this.getAttribute(\"href\");\n if (href) {\n this.link.href = href;\n }\n }\n updateVariant() {\n const variant = this.getAttribute(\"variant\") || \"primary\";\n const mode = this.getAttribute(\"mode\") || \"light\";\n this.link.setAttribute(\"data-variant\", variant);\n this.link.setAttribute(\"data-mode\", mode);\n }\n updateColor() {\n const color = this.getAttribute(\"color\");\n if (color) {\n this.link.style.setProperty(\"--courier-link-color\", color);\n } else {\n this.link.style.removeProperty(\"--courier-link-color\");\n }\n }\n updateUnderline() {\n const underline = this.getAttribute(\"underline\") === \"true\";\n this.link.setAttribute(\"data-underline\", underline.toString());\n }\n updateMode() {\n const mode = this.getAttribute(\"mode\") || \"light\";\n this.link.setAttribute(\"data-mode\", mode);\n }\n updateTarget() {\n const target = this.getAttribute(\"target\");\n if (target) {\n this.link.target = target;\n }\n }\n updateFontFamily() {\n const fontFamily = this.getAttribute(\"font-family\");\n if (fontFamily) {\n this.link.style.setProperty(\"--courier-link-font-family\", fontFamily);\n } else {\n this.link.style.removeProperty(\"--courier-link-font-family\");\n }\n }\n updateFontSize() {\n const fontSize = this.getAttribute(\"font-size\");\n if (fontSize) {\n this.link.style.setProperty(\"--courier-link-font-size\", fontSize);\n } else {\n this.link.style.removeProperty(\"--courier-link-font-size\");\n }\n }\n}\n__publicField(CourierLink, \"observedAttributes\", [\n \"href\",\n \"variant\",\n \"disabled\",\n \"color\",\n \"underline\",\n \"mode\",\n \"target\",\n \"font-family\",\n \"font-size\"\n]);\nclass CourierFactoryElement extends CourierSystemThemeElement {\n constructor() {\n super();\n }\n // Build the element with a factory function\n build(newElement) {\n if (newElement === null) {\n this.replaceChildren();\n return;\n }\n const element = newElement ?? this.defaultElement();\n this.replaceChildren(element);\n }\n // Default element to be used if no factory is provided\n defaultElement() {\n const element = document.createElement(\"div\");\n element.textContent = \"Default Element Factory\";\n element.style.cssText = `\n background-color: red;\n text-align: center;\n padding: 12px;\n `;\n return element;\n }\n}\nclass CourierInfoState extends CourierFactoryElement {\n constructor(props) {\n super();\n // Props\n __publicField(this, \"_props\");\n // Components\n __publicField(this, \"_title\");\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n this._props = props;\n }\n static get id() {\n return \"courier-info-state\";\n }\n defaultElement() {\n var _a;\n const container = document.createElement(\"div\");\n this._title = document.createElement(\"h2\");\n if ((_a = this._props.title) == null ? void 0 : _a.text) {\n this._title.textContent = this._props.title.text;\n }\n this._button = new CourierButton(this._props.button ?? CourierButtonVariants.secondary(this.currentSystemTheme));\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(this._props);\n container.className = \"container\";\n container.appendChild(this._style);\n container.appendChild(this._title);\n container.appendChild(this._button);\n this.appendChild(container);\n return container;\n }\n onSystemThemeChange(_) {\n this.updateStyles(this._props);\n }\n getStyles(props) {\n var _a, _b, _c, _d;\n return `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n }\n\n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n text-align: center;\n padding: 24px;\n box-sizing: border-box;\n height: 100%;\n }\n\n .container h2 {\n margin: 0;\n color: ${((_a = props.title) == null ? void 0 : _a.textColor) ?? \"red\"};\n font-size: ${((_b = props.title) == null ? void 0 : _b.fontSize) ?? \"16px\"};\n font-weight: ${((_c = props.title) == null ? void 0 : _c.fontWeight) ?? \"500\"};\n font-family: ${((_d = props.title) == null ? void 0 : _d.fontFamily) ?? \"inherit\"};\n }\n `;\n }\n updateStyles(props) {\n this._props = props;\n if (this._style) {\n this._style.textContent = this.getStyles(props);\n }\n if (this._button) {\n this._button.updateButton(props.button);\n }\n }\n}\nclass CourierIconButton extends CourierBaseElement {\n constructor(svg, color, backgroundColor, hoverBackgroundColor, activeBackgroundColor, borderRadius, height, width) {\n super();\n // State\n __publicField(this, \"_backgroundColor\");\n __publicField(this, \"_hoverBackgroundColor\");\n __publicField(this, \"_activeBackgroundColor\");\n __publicField(this, \"_borderRadius\");\n __publicField(this, \"_height\");\n __publicField(this, \"_width\");\n // Elements\n __publicField(this, \"_style\");\n __publicField(this, \"_button\");\n __publicField(this, \"_icon\");\n this._borderRadius = borderRadius;\n this._backgroundColor = backgroundColor;\n this._hoverBackgroundColor = hoverBackgroundColor;\n this._activeBackgroundColor = activeBackgroundColor;\n this._height = height;\n this._width = width;\n const shadow = this.attachShadow({ mode: \"open\" });\n this._button = document.createElement(\"button\");\n this._button.setAttribute(\"part\", \"button\");\n this._icon = new CourierIcon(color, svg);\n this._style = document.createElement(\"style\");\n this.refresh();\n shadow.appendChild(this._style);\n this._button.appendChild(this._icon);\n shadow.appendChild(this._button);\n }\n static get id() {\n return \"courier-icon-button\";\n }\n refresh() {\n this._style.textContent = this.getStyles();\n }\n getStyles() {\n return `\n :host {\n display: inline-block;\n border-radius: ${this._borderRadius ?? \"50%\"};\n }\n\n button {\n border: none;\n border-radius: ${this._borderRadius ?? \"50%\"};\n cursor: pointer;\n width: ${this._width ?? \"36px\"};\n height: ${this._height ?? \"36px\"};\n display: flex;\n align-items: center;\n justify-content: center;\n background: ${this._backgroundColor ?? \"transparent\"};\n transition: background-color 0.2s ease;\n touch-action: manipulation;\n }\n\n button:hover {\n background-color: ${this._hoverBackgroundColor ?? \"red\"};\n }\n\n button:active {\n background-color: ${this._activeBackgroundColor ?? \"red\"};\n }\n\n button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n [part=\"icon\"] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n }\n `;\n }\n updateIconColor(color) {\n this._icon.updateColor(color);\n }\n updateIconSVG(svg) {\n this._icon.updateSVG(svg);\n }\n updateBackgroundColor(color) {\n this._backgroundColor = color;\n this.refresh();\n }\n updateHoverBackgroundColor(color) {\n this._hoverBackgroundColor = color;\n this.refresh();\n }\n updateActiveBackgroundColor(color) {\n this._activeBackgroundColor = color;\n this.refresh();\n }\n}\nfunction registerElement(element) {\n if (typeof window !== \"undefined\" && !customElements.get(element.id)) {\n customElements.define(element.id, element);\n }\n}\nfunction injectGlobalStyle(styleId, styles) {\n const selector = `style[data-${styleId}]`;\n const existingStyle = document.querySelector(selector);\n if (!existingStyle) {\n const style = document.createElement(\"style\");\n style.setAttribute(`data-${styleId}`, \"\");\n style.textContent = styles;\n document.head.appendChild(style);\n return style;\n }\n return existingStyle;\n}\nregisterElement(CourierButton);\nregisterElement(CourierIcon);\nregisterElement(CourierLink);\nregisterElement(CourierInfoState);\nregisterElement(CourierIconButton);\nregisterElement(CourierSystemThemeElement);\nexport {\n CourierBaseElement,\n CourierButton,\n CourierButtonVariants,\n CourierColors,\n CourierFactoryElement,\n CourierIcon,\n CourierIconButton,\n CourierIconSVGs,\n CourierInfoState,\n CourierLink,\n CourierSystemThemeElement,\n addSystemThemeModeListener,\n getSystemThemeMode,\n injectGlobalStyle,\n registerElement,\n theme\n};\n//# sourceMappingURL=index.mjs.map\n","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 // 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 // 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 // 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 // Save original message and index\n const snapshot = this.getMessageSnapshot(message);\n\n if (snapshot.inboxIndex === undefined && snapshot.archiveIndex === undefined) {\n return;\n }\n\n if (snapshot.message.opened) {\n return;\n }\n\n try {\n message.opened = new Date().toISOString();\n this.applyMessageSnapshot(snapshot);\n if (canCallApi) {\n await Courier.shared.client?.inbox.open({ messageId: message.messageId });\n }\n } catch (error) {\n this.applyMessageSnapshot(snapshot);\n Courier.shared.client?.options.logger?.error('Error opening message:', error);\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\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._unreadCount !== undefined && !message.archived) {\n if (message.read) {\n this._unreadCount = Math.max(0, this._unreadCount - 1);\n }\n if (!message.read) {\n this._unreadCount = this._unreadCount + 1;\n }\n }\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\";\n\nexport class CourierInboxListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item';\n }\n\n // State\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\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 // 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\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n this._isMobile = 'ontouchstart' in window;\n this.render();\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._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 }\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: pointer;\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 /* Base hover / active */\n @media (hover: hover) {\n ${CourierInboxListItem.id}:hover {\n background-color: ${list?.item?.hoverBackgroundColor ?? 'red'};\n }\n }\n\n ${CourierInboxListItem.id}:active {\n background-color: ${list?.item?.activeBackgroundColor ?? 'red'};\n }\n\n /* Menu hover / active */\n @media (hover: hover) {\n ${CourierInboxListItem.id}: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}: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\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 setOnLongPress(cb: (message: InboxMessage) => void): void {\n this.onItemLongPress = cb;\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 // 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._message.actions.forEach(action => {\n // Create the action element\n const actionButton = new CourierButton({\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 { 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\";\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\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\n constructor(props: {\n themeManager: CourierInboxThemeManager,\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 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 private render(): void {\n\n // Remove all existing elements\n while (this.firstChild) {\n this.removeChild(this.firstChild);\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 const error = this.theme.inbox?.error;\n const errorElement = new CourierInfoState({\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 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 errorElement.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n this.appendChild(errorElement);\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 const empty = this.theme.inbox?.empty;\n const emptyElement = new CourierInfoState({\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 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 emptyElement.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n this.appendChild(emptyElement);\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\n const listItem = new CourierInboxListItem(this.theme);\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 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 // 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: 4px 8px;\n text-align: center;\n display: none;\n pointer-events: none;\n }\n\n ${CourierUnreadCountBadge.id} .button {\n background-color: ${theme.popup?.button?.unreadIndicator?.backgroundColor};\n color: ${theme.popup?.button?.unreadIndicator?.font?.color};\n border-radius: ${theme.popup?.button?.unreadIndicator?.borderRadius};\n font-size: ${theme.popup?.button?.unreadIndicator?.font?.size};\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 }\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 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 } from \"@trycourier/courier-ui-core\";\n\nexport type CourierInboxFontTheme = {\n family?: string;\n weight?: string;\n size?: string;\n color?: string;\n}\n\nexport type CourierInboxIconTheme = {\n color?: string;\n svg?: string;\n}\n\nexport type CourierInboxFilterItemTheme = {\n icon?: CourierInboxIconTheme;\n text?: string;\n}\n\nexport type CourierInboxUnreadIndicatorTheme = {\n font?: CourierInboxFontTheme;\n backgroundColor?: string;\n borderRadius?: string;\n}\n\nexport type CourierInboxIconButtonTheme = {\n icon?: CourierInboxIconTheme;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n}\n\nexport type CourierInboxButtonTheme = {\n font?: CourierInboxFontTheme;\n text?: string;\n shadow?: string;\n border?: string;\n borderRadius?: string;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n}\n\nexport type CourierInboxMenuButtonTheme = CourierInboxIconButtonTheme & {\n unreadIndicator?: CourierInboxUnreadIndicatorTheme;\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?: CourierInboxUnreadIndicatorTheme;\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 unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n size: '14px',\n family: undefined,\n weight: undefined\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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: '14px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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 unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n size: '14px',\n family: undefined,\n weight: undefined\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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: '14px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '12px'\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 unreadIndicator: {\n ...defaultTheme.popup?.button?.unreadIndicator,\n ...theme.popup?.button?.unreadIndicator\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 { CourierComponentThemeMode, SystemThemeMode, addSystemThemeModeListener, getSystemThemeMode } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme, defaultDarkTheme, defaultLightTheme, mergeTheme } from \"./courier-inbox-theme\";\n\nexport interface CourierInboxThemeSubscription {\n manager: CourierInboxThemeManager;\n unsubscribe: () => void;\n}\n\nexport class CourierInboxThemeManager {\n\n // Event IDs\n private readonly THEME_CHANGE_EVENT: string = 'courier_inbox_theme_change';\n\n // State\n private _theme: CourierInboxTheme;\n private _lightTheme: CourierInboxTheme = defaultLightTheme;\n private _darkTheme: CourierInboxTheme = defaultDarkTheme;\n private _target: EventTarget;\n private _subscriptions: CourierInboxThemeSubscription[] = [];\n\n // System theme\n private _userMode: CourierComponentThemeMode;\n private _systemMode: SystemThemeMode;\n private _systemThemeCleanup: (() => void) | undefined;\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._lightTheme = theme;\n if (this._systemMode === 'light') {\n this.updateTheme();\n }\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._darkTheme = theme;\n if (this._systemMode === 'dark') {\n this.updateTheme();\n }\n }\n\n constructor(initialTheme: CourierInboxTheme) {\n this._theme = initialTheme;\n this._target = new EventTarget();\n this._userMode = 'system' as CourierComponentThemeMode;\n\n // Get the initial system theme\n this._systemMode = getSystemThemeMode();\n this.setLightTheme(defaultLightTheme);\n this.setDarkTheme(defaultDarkTheme);\n\n // Set up system theme listener\n this._systemThemeCleanup = addSystemThemeModeListener((mode: SystemThemeMode) => {\n this._systemMode = mode;\n this.updateTheme();\n });\n }\n\n /**\n * Get the current system theme\n */\n public get currentSystemTheme(): SystemThemeMode {\n return this._systemMode;\n }\n\n /**\n * Get the current theme\n */\n public getTheme() {\n return this._theme;\n }\n\n /**\n * Update the theme\n */\n private updateTheme() {\n\n // Use the user mode or fallback to the system mode\n const mode = this._userMode === 'system' ? this._systemMode : this._userMode;\n\n // Get the theme \n const theme = mode === 'light' ? this._lightTheme : this._darkTheme;\n\n // Merge the theme\n const mergedTheme = mergeTheme(mode, theme);\n\n // Set the theme\n this.setTheme(mergedTheme);\n }\n\n /**\n * Set the theme and notify all listeners\n */\n private setTheme(theme: CourierInboxTheme) {\n if (theme === this._theme) return;\n this._theme = theme;\n this._target.dispatchEvent(new CustomEvent(this.THEME_CHANGE_EVENT, {\n detail: { theme }\n }));\n }\n\n /**\n * Set the mode and notify all listeners\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._userMode = mode;\n this.updateTheme();\n }\n\n /**\n * Subscribe to theme changes\n * @param {Function} callback - Function to run when the theme changes\n * @returns {CourierInboxThemeSubscription} - Object with remove method to stop listening\n */\n subscribe(callback: (theme: CourierInboxTheme) => void): CourierInboxThemeSubscription {\n const controller = new AbortController();\n this._target.addEventListener(this.THEME_CHANGE_EVENT, ((e: Event) => {\n callback((e as CustomEvent<{ theme: CourierInboxTheme }>).detail.theme);\n }) as EventListener, { signal: controller.signal });\n\n const subscription: CourierInboxThemeSubscription = {\n manager: this,\n unsubscribe: () => {\n controller.abort();\n const index = this._subscriptions.indexOf(subscription);\n if (index > -1) {\n this._subscriptions.splice(index, 1);\n }\n }\n };\n\n this._subscriptions.push(subscription);\n return subscription;\n }\n\n /**\n * Clean up event listeners\n */\n public cleanup() {\n if (this._systemThemeCleanup) {\n this._systemThemeCleanup();\n }\n this._subscriptions.forEach(subscription => subscription.unsubscribe());\n this._subscriptions = [];\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 // Theming\n private _themeManager: CourierInboxThemeManager;\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\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 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 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 public setHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._headerFactory = factory;\n this.updateHeader();\n }\n\n public removeHeader() {\n this._headerFactory = null;\n this.updateHeader();\n }\n\n public setLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setLoadingStateFactory(factory);\n }\n\n public setEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setEmptyStateFactory(factory);\n }\n\n public setErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setErrorStateFactory(factory);\n }\n\n public setListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setListItemFactory(factory);\n }\n\n public setPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._list?.setPaginationItemFactory(factory);\n }\n\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageClick = handler;\n }\n\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._onMessageActionClick = handler;\n }\n\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._onMessageLongPress = handler;\n }\n\n public setFeedType(feedType: CourierInboxFeedType) {\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 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 { CourierUnreadCountBadge } from \"./courier-unread-count-badge\";\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 _unreadCountBadge?: CourierUnreadCountBadge;\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 count badge\n this._unreadCountBadge = new CourierUnreadCountBadge({\n themeBus: this._themeSubscription.manager,\n location: 'button'\n });\n this._unreadCountBadge.id = 'unread-badge';\n\n this._container.appendChild(this._triggerButton);\n this._container.appendChild(this._unreadCountBadge);\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: -8px;\n left: 50%;\n pointer-events: none;\n }\n `;\n }\n\n public onUnreadCountChange(unreadCount: number): void {\n this._unreadCountBadge?.setCount(unreadCount);\n this.refreshTheme();\n }\n\n private refreshTheme() {\n\n // Trigger button\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 // Unread count badge\n this._unreadCountBadge?.refreshTheme('button');\n\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 = '40px';\n private _right: string = '0';\n private _bottom: string = '40px';\n private _left: string = '0';\n\n // Theming\n private _themeManager = new CourierInboxThemeManager(defaultLightTheme);\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\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 public onUnreadCountChange(_: number): void {\n this.render();\n }\n\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageClick(handler);\n }\n\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._inbox?.onMessageActionClick(handler);\n }\n\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox?.onMessageLongPress(handler);\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;\n this._popup.style.right = this._right;\n break;\n case 'top-left':\n this._popup.style.top = this._top;\n this._popup.style.left = this._left;\n break;\n case 'top-center':\n this._popup.style.top = this._top;\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;\n this._popup.style.right = this._right;\n break;\n case 'bottom-left':\n this._popup.style.bottom = this._bottom;\n this._popup.style.left = this._left;\n break;\n case 'bottom-center':\n this._popup.style.bottom = this._bottom;\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;\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;\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 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 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 public setContent(element: HTMLElement) {\n if (!this._inbox) return;\n this._inbox.innerHTML = '';\n this._inbox.appendChild(element);\n }\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 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 public setFeedType(feedType: CourierInboxFeedType) {\n this._inbox?.setFeedType(feedType);\n }\n\n // Factory methods\n public setHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setHeader(factory);\n }\n\n public removeHeader() {\n this._inbox?.removeHeader();\n }\n\n public setLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setLoadingState(factory);\n }\n\n public setEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setEmptyState(factory);\n }\n\n public setErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setErrorState(factory);\n }\n\n public setListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setListItem(factory);\n }\n\n public setPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox?.setPaginationItem(factory);\n }\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","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","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"],"names":["_isInitialised","__defProp","Object","defineProperty","__typeError","msg","TypeError","__publicField","obj","key","value","enumerable","configurable","writable","__defNormalProp","__accessCheck","member","has","__privateSet","setter","set","CourierColors","theme","light","colors","primary","secondary","border","link","icon","button","cornerRadius","dark","getSystemThemeMode","window","matchMedia","matches","addSystemThemeModeListener","callback","mediaQuery","handler","e","addEventListener","removeEventListener","HTMLElementBase","HTMLElement","CourierBaseElement","constructor","super","arguments","this","WeakSet","add","id","connectedCallback","_a","get","onComponentMounted","call","disconnectedCallback","onComponentUnmounted","WeakMap","CourierSystemThemeElement","_currentSystemTheme","_systemThemeCleanup","mode","onSystemThemeChange","currentSystemTheme","_","baseButtonStyles","borderRadius","fontSize","CourierButtonVariants","backgroundColor","textColor","fontWeight","shadow","CourierButton","props","attachShadow","_button","document","createElement","setAttribute","_style","textContent","getStyles","appendChild","updateButton","preventDefault","stopPropagation","onClick","defaultBorderRadius","defaultFontWeight","fontFamily","defaultFontSize","defaultBackgroundColor","defaultTextColor","defaultBorder","defaultShadow","hoverBackgroundColor","activeBackgroundColor","text","CourierIconSVGs","inbox","archive","check","filter","overflow","read","archiveRead","unread","unarchive","CourierIcon","color","svg","_color","_svg","_iconContainer","refresh","innerHTML","updateColor","updateSVG","CourierLink","style","updateVariant","updateUnderline","updateMode","slot","updateHref","attributeChangedCallback","name","oldValue","newValue","pointerEvents","hasAttribute","opacity","updateTarget","updateFontFamily","updateFontSize","href","getAttribute","variant","setProperty","removeProperty","underline","toString","target","CourierFactoryElement","build","newElement","replaceChildren","element","defaultElement","cssText","CourierInfoState","_props","container","_title","title","className","updateStyles","_b","_c","_d","CourierIconButton","height","width","_borderRadius","_backgroundColor","_hoverBackgroundColor","_activeBackgroundColor","_height","_width","_icon","updateIconColor","updateIconSVG","updateBackgroundColor","updateHoverBackgroundColor","updateActiveBackgroundColor","registerElement","customElements","define","injectGlobalStyle","styleId","styles","selector","existingStyle","querySelector","head","copyMessage","message","copy","actions","map","action","data","JSON","parse","stringify","copyInboxAction","tags","trackingIds","copyInboxDataSet","dataSet","messages","CourierInboxListItemMenu","_theme","menu","list","item","setOptions","options","_options","renderMenu","menuTheme","cancelEvent","forEach","opt","handleInteraction","show","display","classList","hide","remove","_CourierInboxDatastore","shared","instance","unreadCount","_unreadCount","inboxDataSet","_inboxDataSet","feedType","canPaginate","paginationCursor","archiveDataSet","_archiveDataSet","addDataStoreListener","listener","_dataStoreListeners","push","removeDataStoreListener","l","fetchCachableDataSet","canUseCache","response","fetch","nodes","_e","pageInfo","hasNextPage","_h","_f","_g","startCursor","fetchUnreadCount","Courier","client","getUnreadMessageCount","load","userId","Error","properties","Promise","all","getMessages","getArchivedMessages","events","onDataSetChange","onUnreadCountChange","error","logger","onError","listenForUpdates","connectSocket","socket","info","isConnecting","isOpen","connectionId","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","connect","find","m","fetchNextPageOfMessages","isPaginatingInbox","paginationLimit","_j","_i","addPage","isPaginatingArchive","_m","_p","_o","_s","_q","_r","_v","_t","_u","canMutate","datastoreSnapshot","getDatastoreSnapshot","snapshot","getMessageSnapshot","Date","toISOString","applyMessageSnapshot","applyDatastoreSnapshot","inboxIndex","archiveIndex","opened","open","clickTrackingId","click","trackingId","messageSnapshot","archived","removeMessage","insertIndex","findInsertIndex","timestamp","findIndex","splice","archiveAll","readAll","newMessage","i","length","created","onPageAdded","index","onMessageAdd","onMessageRemove","updateMessage","Math","max","onMessageUpdate","CourierInboxDatastore","CourierInboxListItem","_isMobile","render","contentContainer","_titleElement","_subtitleElement","_actionsContainer","_timeElement","_unreadIndicator","_menu","_getMenuOptions","append","cancelPropagation","contains","composedPath","includes","_message","onItemClick","_isLongPress","_setupHoverBehavior","_setupLongPressBehavior","divider","unreadIndicatorColor","family","_l","_k","size","_n","subtitle","time","_x","_w","_z","_y","_showMenu","_hideMenu","enabled","longPress","_longPressTimeout","setTimeout","onItemLongPress","navigator","vibrate","vibrationDuration","displayDuration","passive","clearTimeout","setOnLongPress","cb","isArchiveFeed","_feedType","setMessage","_updateContent","setOnItemClick","setOnItemActionClick","onItemActionClick","setOnItemLongPress","toggle","preview","body","now","messageDate","diffInSeconds","floor","getTime","getMessageTime","hasActions","actionsTheme","actionButton","content","font","weight","CourierInboxSkeletonListItem","firstRow","CourierSkeletonAnimatedRow","secondRow","thirdRow","skeletonItem","loading","animation","barColor","hexColor","r","parseInt","slice","g","b","colorWithAlpha80","colorWithAlpha40","barHeight","duration","barBorderRadius","CourierInboxSkeletonList","CourierInboxPaginationListItem","_customItem","customItem","_onPaginationTrigger","onPaginationTrigger","_skeletonLoadingList","_observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","CourierInboxList","_onRefresh","onRefresh","_onMessageClick","onMessageClick","_onMessageActionClick","onMessageActionClick","_onMessageLongPress","onMessageLongPress","_themeSubscription","themeManager","subscribe","_messages","manager","getTheme","_listStyles","_listItemStyles","_listItemMenuStyles","unsubscribe","setDataSet","_canPaginate","Boolean","_error","_isLoading","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","firstChild","removeChild","errorElement","_errorStateFactory","loadingElement","_A","_loadingStateFactory","empty","_B","emptyElement","_C","_E","_D","_G","_F","_I","_H","_K","_J","_L","_M","_N","_O","_Q","_P","_S","_R","_U","_T","_W","_V","_X","_Y","_Z","__","_emptyStateFactory","_listItemFactory","listItem","paginationItem","_$","_paginationItemFactory","setLoadingStateFactory","factory","setEmptyStateFactory","setErrorStateFactory","setListItemFactory","setPaginationItemFactory","CourierInboxOptionMenuItem","_option","option","_isSelected","isSelected","_isSelectedable","selectable","_content","_itemIcon","spacer","_selectionIcon","refreshTheme","selectionIcon","CourierInboxOptionMenu","type","onMenuOpen","_type","_selectable","_selectedIndex","_onMenuOpen","_menuButton","toggleMenu","bind","handleOutsideClick","header","menus","popup","_aa","isFilter","buttonConfig","filters","defaultIcon","refreshMenuItems","menuItem","closeMenu","isOpening","selectOption","o","CourierUnreadCountBadge","_location","location","themeBus","_badge","updateBadge","unreadIndicator","setCount","count","_count","CourierInboxHeaderTitle","_iconElement","_unreadBadge","updateFilter","updateSelectedOption","CourierInboxHeader","_onFeedTypeChange","onFeedTypeChange","observedAttributes","onComponentUmounted","getFilterOptions","filterMenu","handleOptionMenuItemClick","getActionOptions","actionMenu","markAllRead","_filterMenu","_actionMenu","_titleSection","filterOptions","headerContent","CourierInboxDataStoreListener","defaultLightTheme","defaultDarkTheme","mergeTheme","defaultTheme","_ba","_ea","_da","_ca","_ha","_ga","_la","_ia","_ja","_ka","_pa","_oa","_na","_ma","_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","_Ta","_Qa","_Ra","_Sa","_Xa","_Wa","_Va","_Ua","_ab","_$a","__a","_Za","_Ya","_fb","_eb","_db","_cb","_bb","_jb","_gb","_hb","_ib","_nb","_mb","_lb","_kb","_sb","_rb","_qb","_pb","_ob","_xb","_wb","_vb","_ub","_tb","_Ab","_zb","_yb","_Db","_Cb","_Hb","_Eb","_Fb","_Gb","_Lb","_Kb","_Jb","_Ib","_Qb","_Pb","_Ob","_Nb","_Mb","_Vb","_Ub","_Tb","_Sb","_Rb","_Zb","_Wb","_Xb","_Yb","_bc","_ac","_$b","__b","_gc","_fc","_ec","_dc","_cc","_lc","_kc","_jc","_ic","_hc","_pc","_mc","_nc","_oc","_tc","_sc","_rc","_qc","_yc","_xc","_wc","_vc","_uc","_Dc","_Cc","_Bc","_Ac","_zc","_Ec","_Fc","_Hc","_Gc","_Jc","_Ic","_Mc","_Lc","_Kc","_Pc","_Oc","_Tc","_Qc","_Rc","_Sc","_Xc","_Wc","_Vc","_Uc","_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","initialTheme","_target","EventTarget","_userMode","_systemMode","setLightTheme","setDarkTheme","updateTheme","_lightTheme","_darkTheme","mergedTheme","setTheme","dispatchEvent","CustomEvent","THEME_CHANGE_EVENT","detail","setMode","controller","AbortController","signal","subscription","abort","_subscriptions","indexOf","cleanup","CourierInbox","_currentFeed","_themeManager","_inboxStyle","_unreadIndicatorStyle","_header","_list","async","bubbles","composed","_datastoreListener","updateHeader","_authListener","addAuthenticationListener","_defaultProps","setHeader","_headerFactory","removeHeader","setLoadingState","setEmptyState","setErrorState","setListItem","setPaginationItem","messageCount","headerElement","Function","CourierInboxMenuButton","_container","_triggerButton","_unreadCountBadge","CourierInboxPopupMenu","_popup","SAFE_SELECTORS","some","node","sel","_inbox","togglePopup","updatePopupPosition","isValidPosition","_popupAlignment","setSize","_top","_right","_bottom","_left","top","bottom","left","right","margin","transform","isVisible","setContent","setPosition","position","setMenuButton","_popupMenuButtonFactory","customButton","___"],"mappings":"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"}