@trycourier/courier-ui-inbox 1.0.11-beta → 1.0.12-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 return {\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.primary,\n textColor: theme[mode].colors.secondary,\n fontWeight: \"500\",\n shadow: \"none\"\n };\n },\n secondary: (mode) => {\n return {\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 },\n tertiary: (mode) => {\n return {\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 }\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 mode = props.mode === \"system\" ? this.currentSystemTheme : props.mode;\n const defaultTextColor = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.textColor;\n };\n const defaultBackgroundColor = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.backgroundColor;\n };\n const defaultBorder = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.border;\n };\n const defaultShadow = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.shadow;\n };\n const defaultBorderRadius = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.borderRadius;\n };\n const defaultFontSize = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.fontSize;\n };\n const defaultFontWeight = () => {\n const secondary = CourierButtonVariants.secondary(mode);\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\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\n\nexport class CourierInboxListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item';\n }\n\n // State\n private _themeManager: CourierInboxThemeManager;\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\n\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(themeManager: CourierInboxThemeManager) {\n super();\n this._themeManager = themeManager;\n this._theme = themeManager.getTheme();\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 mode: this._themeManager.mode,\n text: action.content,\n variant: 'secondary',\n backgroundColor: actionsTheme?.backgroundColor,\n hoverBackgroundColor: actionsTheme?.hoverBackgroundColor,\n activeBackgroundColor: actionsTheme?.activeBackgroundColor,\n border: actionsTheme?.border,\n borderRadius: actionsTheme?.borderRadius,\n shadow: actionsTheme?.shadow,\n fontFamily: actionsTheme?.font?.family,\n fontSize: actionsTheme?.font?.size,\n fontWeight: actionsTheme?.font?.weight,\n textColor: actionsTheme?.font?.color,\n onClick: () => {\n if (this._message && this.onItemActionClick) {\n this.onItemActionClick(this._message, action);\n }\n },\n });\n\n // Add the action element to the actions container\n this._actionsContainer?.appendChild(actionButton);\n });\n }\n }\n}\n\nregisterElement(CourierInboxListItem);","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list-item';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonListItem.id, CourierInboxSkeletonListItem.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n // Create skeleton items using CourierSkeletonAnimatedRow\n const firstRow = new CourierSkeletonAnimatedRow(this._theme);\n const secondRow = new CourierSkeletonAnimatedRow(this._theme);\n const thirdRow = new CourierSkeletonAnimatedRow(this._theme);\n\n this.appendChild(firstRow);\n this.appendChild(secondRow);\n this.appendChild(thirdRow);\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxSkeletonListItem.id} {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n width: 100%;\n box-sizing: border-box;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:first-child {\n width: 35%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(2) {\n width: 100%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(3) {\n width: 82%;\n }\n `;\n }\n}\n\n// Register the custom element\nregisterElement(CourierInboxSkeletonListItem);\n\nclass CourierSkeletonAnimatedRow extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-skeleton-animated-row';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierSkeletonAnimatedRow.id, CourierSkeletonAnimatedRow.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n const skeletonItem = document.createElement('div');\n skeletonItem.className = 'skeleton-item';\n this.appendChild(skeletonItem);\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n const color = theme.inbox?.loading?.animation?.barColor ?? '#000';\n\n // Handle both 3 and 6 character hex colors\n const hexColor = color.length === 4 ?\n `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` :\n color;\n\n // Convert hex to RGB\n const r = parseInt(hexColor.slice(1, 3), 16);\n const g = parseInt(hexColor.slice(3, 5), 16);\n const b = parseInt(hexColor.slice(5, 7), 16);\n\n const colorWithAlpha80 = `rgba(${r}, ${g}, ${b}, 0.8)`; // 80% opacity\n const colorWithAlpha40 = `rgba(${r}, ${g}, ${b}, 0.4)`; // 40% opacity\n\n return `\n ${CourierSkeletonAnimatedRow.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n }\n\n ${CourierSkeletonAnimatedRow.id} .skeleton-item {\n height: ${theme.inbox?.loading?.animation?.barHeight ?? '14px'};\n width: 100%;\n background: linear-gradient(\n 90deg,\n ${colorWithAlpha80} 25%,\n ${colorWithAlpha40} 50%,\n ${colorWithAlpha80} 75%\n );\n background-size: 200% 100%;\n animation: ${CourierSkeletonAnimatedRow.id}-shimmer ${theme.inbox?.loading?.animation?.duration ?? '2s'} ease-in-out infinite;\n border-radius: ${theme.inbox?.loading?.animation?.barBorderRadius ?? '14px'};\n }\n\n @keyframes ${CourierSkeletonAnimatedRow.id}-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n `;\n }\n}\n\nregisterElement(CourierSkeletonAnimatedRow);\n","import { CourierFactoryElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxSkeletonListItem } from \"./courier-inbox-skeleton-list-item\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonList extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonList.id, CourierInboxSkeletonList.getStyles(this._theme));\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n defaultElement(): HTMLElement {\n const list = document.createElement('div');\n list.className = 'list';\n\n // Create skeleton items\n for (let i = 0; i < 3; i++) {\n const skeletonItem = new CourierInboxSkeletonListItem(this._theme); // TODO: Make this a prop\n list.appendChild(skeletonItem);\n }\n\n this.appendChild(list);\n return list;\n\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxSkeletonList.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list {\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list > * {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 100%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(2) {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 88%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(3) {\n border-bottom: none;\n opacity: 50%;\n }\n `;\n\n }\n}\n\nregisterElement(CourierInboxSkeletonList);\n","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxSkeletonList } from \"./courier-inbox-skeleton-list\";\n\nexport class CourierInboxPaginationListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-pagination-list-item';\n }\n\n // State\n private _theme: CourierInboxTheme;\n\n // Components\n private _style?: HTMLStyleElement;\n private _skeletonLoadingList?: CourierInboxSkeletonList;\n private _observer?: IntersectionObserver;\n private _customItem?: HTMLElement;\n\n // Handlers\n private _onPaginationTrigger: () => void;\n\n constructor(props: { theme: CourierInboxTheme, customItem?: HTMLElement, onPaginationTrigger: () => void }) {\n super();\n this._theme = props.theme;\n this._customItem = props.customItem;\n this._onPaginationTrigger = props.onPaginationTrigger;\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxPaginationListItem.id, CourierInboxPaginationListItem.getStyles(this._theme));\n\n if (this._customItem) {\n this.appendChild(this._customItem);\n } else {\n const container = document.createElement('div');\n container.className = 'skeleton-container';\n\n this._skeletonLoadingList = new CourierInboxSkeletonList(this._theme);\n this._skeletonLoadingList.build(undefined);\n container.appendChild(this._skeletonLoadingList);\n\n this.appendChild(container);\n }\n\n // Initialize intersection observer\n this._observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this._onPaginationTrigger();\n }\n });\n });\n\n // Start observing the element\n this._observer.observe(this);\n\n }\n\n onComponentUnmounted() {\n this._observer?.disconnect();\n this._style?.remove();\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxPaginationListItem.id} {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n }\n\n ${CourierInboxPaginationListItem.id} .skeleton-container {\n height: 150%;\n }\n `;\n }\n\n}\n\nregisterElement(CourierInboxPaginationListItem);\n","import { 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 private _errorContainer?: CourierInfoState;\n private _emptyContainer?: CourierInfoState;\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 public refreshInfoStateThemes() {\n this._emptyContainer?.updateStyles(this.errorProps);\n this._emptyContainer?.updateStyles(this.emptyProps);\n }\n\n get errorProps(): any {\n const error = this.theme.inbox?.error;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: error?.title?.text ?? this._error?.message,\n textColor: error?.title?.font?.color,\n fontFamily: error?.title?.font?.family,\n fontSize: error?.title?.font?.size,\n fontWeight: error?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: error?.button?.text,\n backgroundColor: error?.button?.backgroundColor,\n hoverBackgroundColor: error?.button?.hoverBackgroundColor,\n activeBackgroundColor: error?.button?.activeBackgroundColor,\n textColor: error?.button?.font?.color,\n fontFamily: error?.button?.font?.family,\n fontSize: error?.button?.font?.size,\n fontWeight: error?.button?.font?.weight,\n shadow: error?.button?.shadow,\n border: error?.button?.border,\n borderRadius: error?.button?.borderRadius,\n onClick: () => this.handleRetry()\n }\n };\n }\n\n get emptyProps(): any {\n const empty = this.theme.inbox?.empty;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: empty?.title?.text ?? `No ${this._feedType} messages yet`,\n textColor: empty?.title?.font?.color,\n fontFamily: empty?.title?.font?.family,\n fontSize: empty?.title?.font?.size,\n fontWeight: empty?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: empty?.button?.text,\n backgroundColor: empty?.button?.backgroundColor,\n hoverBackgroundColor: empty?.button?.hoverBackgroundColor,\n activeBackgroundColor: empty?.button?.activeBackgroundColor,\n textColor: empty?.button?.font?.color,\n fontFamily: empty?.button?.font?.family,\n fontSize: empty?.button?.font?.size,\n fontWeight: empty?.button?.font?.weight,\n shadow: empty?.button?.shadow,\n border: empty?.button?.border,\n borderRadius: empty?.button?.borderRadius,\n onClick: () => this.handleRefresh()\n },\n };\n }\n\n private render(): void {\n\n // Remove all existing elements\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n this._errorContainer = undefined;\n this._emptyContainer = undefined;\n }\n\n // Update list styles\n if (this._listStyles) {\n this._listStyles.textContent = CourierInboxList.getStyles(this.theme);\n }\n\n // Update list item styles\n if (this._listItemStyles) {\n this._listItemStyles.textContent = CourierInboxListItem.getStyles(this.theme);\n }\n\n // Update list item menu styles\n if (this._listItemMenuStyles) {\n this._listItemMenuStyles.textContent = CourierInboxListItemMenu.getStyles(this.theme);\n }\n\n // Error state\n if (this._error) {\n this._errorContainer = new CourierInfoState(this.errorProps);\n this._errorContainer.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n this.appendChild(this._errorContainer);\n return;\n }\n\n // Loading state\n if (this._isLoading) {\n const loadingElement = new CourierInboxSkeletonList(this.theme);\n loadingElement.build(this._loadingStateFactory?.({ feedType: this._feedType }));\n this.appendChild(loadingElement);\n return;\n }\n\n // Empty state\n if (this._messages.length === 0) {\n this._emptyContainer = new CourierInfoState(this.emptyProps);\n this._emptyContainer.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n this.appendChild(this._emptyContainer);\n return;\n }\n\n // Create list before adding messages\n const list = document.createElement('ul');\n this.appendChild(list);\n\n // Add messages to the list\n this._messages.forEach((message, index) => {\n if (this._listItemFactory) {\n list.appendChild(this._listItemFactory({ message, index }));\n return;\n }\n\n const listItem = new CourierInboxListItem(this._themeSubscription.manager);\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 public get mode(): CourierComponentThemeMode {\n return this._userMode;\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 this._list?.refreshInfoStateThemes();\n if (this._inboxStyle) {\n this._inboxStyle.textContent = this.getStyles();\n }\n if (this._unreadIndicatorStyle) {\n this._unreadIndicatorStyle.textContent = CourierUnreadCountBadge.getStyles(this.theme);\n }\n }\n\n private getStyles(): string {\n return `\n ${CourierInbox.id} {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: ${this._defaultProps.height};\n }\n\n ${CourierInbox.id} courier-inbox-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n }\n `;\n }\n\n 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 // Inbox Handlers\n private _onMessageClick?: (props: CourierInboxListItemFactoryProps) => void;\n private _onMessageActionClick?: (props: CourierInboxListItemActionFactoryProps) => void;\n private _onMessageLongPress?: (props: CourierInboxListItemFactoryProps) => void;\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 // Handle click events\n if (this._inbox) {\n this._inbox.onMessageClick((props) => {\n if (this._onMessageClick) {\n this._onMessageClick(props);\n }\n this.closePopup();\n });\n\n this._inbox.onMessageActionClick((props) => {\n if (this._onMessageActionClick) {\n this._onMessageActionClick(props);\n }\n this.closePopup();\n });\n\n this._inbox.onMessageLongPress((props) => {\n if (this._onMessageLongPress) {\n this._onMessageLongPress(props);\n }\n this.closePopup();\n });\n }\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._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 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 public closePopup() {\n if (!this._popup) return;\n this._popup.style.display = 'none';\n }\n\n private handleOutsideClick = (event: MouseEvent) => {\n if (!this._popup) return;\n\n // Nodes the click may legally occur inside without closing the popup\n const SAFE_SELECTORS = [\n 'courier-inbox-option-menu',\n ];\n\n // composedPath() gives us every node (even inside shadow DOMs)\n const clickIsInsideAllowedArea = event\n .composedPath()\n .some(node => {\n if (!(node instanceof HTMLElement)) return false;\n if (node === this._popup || this._popup!.contains(node)) return true;\n return SAFE_SELECTORS.some(sel => node.matches(sel));\n });\n\n if (clickIsInsideAllowedArea) return;\n\n // Otherwise, it really was an outside click – hide the popup\n this._popup.style.display = 'none';\n };\n\n 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","fontFamily","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","themeManager","_themeManager","getTheme","_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","subscribe","_messages","manager","_listStyles","_listItemStyles","_listItemMenuStyles","unsubscribe","setDataSet","_canPaginate","Boolean","_error","_isLoading","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","refreshInfoStateThemes","_emptyContainer","errorProps","emptyProps","themeMode","empty","firstChild","removeChild","_errorContainer","_errorStateFactory","loadingElement","_loadingStateFactory","_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","_E","_D","_C","_B","_A","_K","_J","_I","_H","_G","_F","_Q","_P","_O","_N","_M","_L","_W","_V","_U","_T","_S","_R","_aa","_$","__","_Z","_Y","_X","isFilter","buttonConfig","filters","defaultIcon","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","_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","closePopup","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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"}
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 return {\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.primary,\n textColor: theme[mode].colors.secondary,\n fontWeight: \"500\",\n shadow: \"none\"\n };\n },\n secondary: (mode) => {\n return {\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 },\n tertiary: (mode) => {\n return {\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 }\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 mode = props.mode === \"system\" ? this.currentSystemTheme : props.mode;\n const defaultTextColor = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.textColor;\n };\n const defaultBackgroundColor = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.backgroundColor;\n };\n const defaultBorder = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.border;\n };\n const defaultShadow = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.shadow;\n };\n const defaultBorderRadius = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.borderRadius;\n };\n const defaultFontSize = () => {\n const secondary = CourierButtonVariants.secondary(mode);\n return secondary.fontSize;\n };\n const defaultFontWeight = () => {\n const secondary = CourierButtonVariants.secondary(mode);\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\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\n\nexport class CourierInboxListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-list-item';\n }\n\n // State\n private _themeManager: CourierInboxThemeManager;\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\n private _canClick: boolean = false;\n // private _canLongPress: boolean = false; // Unused for now. But we can use this in the future if needed.\n\n // Elements\n private _titleElement?: HTMLParagraphElement;\n private _subtitleElement?: HTMLParagraphElement;\n private _timeElement?: HTMLParagraphElement;\n private _menu?: CourierInboxListItemMenu;\n private _unreadIndicator?: HTMLDivElement;\n private _actionsContainer?: HTMLDivElement;\n\n // Touch gestures\n private _longPressTimeout: number | null = null;\n private _isLongPress: boolean = false;\n\n // 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(themeManager: CourierInboxThemeManager, canClick: boolean, _canLongPress: boolean) {\n super();\n this._canClick = canClick;\n // this._canLongPress = canLongPress;\n this._themeManager = themeManager;\n this._theme = themeManager.getTheme();\n this._isMobile = 'ontouchstart' in window;\n this.render();\n }\n\n private render() {\n\n const contentContainer = document.createElement('div');\n contentContainer.className = 'content-container';\n\n // Title\n this._titleElement = document.createElement('p');\n this._titleElement.className = 'title';\n\n // Subtitle\n this._subtitleElement = document.createElement('p');\n this._subtitleElement.className = 'subtitle';\n\n // Actions\n this._actionsContainer = document.createElement('div');\n this._actionsContainer.className = 'actions-container';\n\n contentContainer.appendChild(this._titleElement);\n contentContainer.appendChild(this._subtitleElement);\n contentContainer.appendChild(this._actionsContainer);\n\n // Time\n this._timeElement = document.createElement('p');\n this._timeElement.className = 'time';\n\n // Unread indicator\n this._unreadIndicator = document.createElement('div');\n this._unreadIndicator.className = 'unread-indicator';\n\n // Action menu\n this._menu = new CourierInboxListItemMenu(this._theme);\n this._menu.setOptions(this._getMenuOptions());\n\n // Append elements into shadow‑DOM\n this.append(this._unreadIndicator, contentContainer, this._timeElement, this._menu);\n\n const cancelPropagation = (e: Event): void => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n this._menu.addEventListener('mousedown', cancelPropagation);\n this._menu.addEventListener('pointerdown', cancelPropagation);\n this._menu.addEventListener('click', cancelPropagation);\n\n this.addEventListener('click', (e) => {\n if (!this._canClick) return;\n if (this._menu && (this._menu.contains(e.target as Node) || e.composedPath().includes(this._menu))) {\n return;\n }\n if (this._message && this.onItemClick && !(e.target instanceof CourierIcon) && !this._isLongPress) {\n this.onItemClick(this._message);\n }\n });\n\n this._setupHoverBehavior();\n this._setupLongPressBehavior();\n\n // Enable clickable class if canClick\n if (this._canClick) {\n this.classList.add('clickable');\n }\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const list = theme.inbox?.list;\n\n return `\n ${CourierInboxListItem.id} {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n border-bottom: ${list?.item?.divider ?? '1px solid red'};\n font-family: inherit;\n cursor: default;\n transition: background-color 0.2s ease;\n margin: 0;\n width: 100%;\n box-sizing: border-box;\n padding: 12px 20px;\n position: relative;\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n touch-action: manipulation;\n }\n\n /* Only apply hover/active background if clickable */\n @media (hover: hover) {\n ${CourierInboxListItem.id}.clickable:hover {\n cursor: pointer;\n background-color: ${list?.item?.hoverBackgroundColor ?? 'red'};\n }\n }\n\n ${CourierInboxListItem.id}.clickable:active {\n cursor: pointer;\n background-color: ${list?.item?.activeBackgroundColor ?? 'red'};\n }\n\n /* Menu hover / active */\n @media (hover: hover) {\n ${CourierInboxListItem.id}.clickable:hover:has(courier-inbox-list-item-menu:hover, courier-inbox-list-item-menu *:hover, courier-button:hover, courier-button *:hover) {\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n }\n }\n\n ${CourierInboxListItem.id}.clickable:active:has(courier-inbox-list-item-menu:active, courier-inbox-list-item-menu *:active, courier-button:active, courier-button *:active) {\n background-color: ${list?.item?.backgroundColor ?? 'transparent'};\n }\n\n ${CourierInboxListItem.id}:last-child {\n border-bottom: none;\n }\n\n ${CourierInboxListItem.id} .unread-indicator {\n position: absolute;\n top: 28px;\n left: 6px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: ${list?.item?.unreadIndicatorColor ?? 'red'};\n display: none;\n }\n\n ${CourierInboxListItem.id}.unread .unread-indicator {\n display: block;\n }\n\n ${CourierInboxListItem.id} .content-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin-right: 12px;\n }\n\n ${CourierInboxListItem.id} p {\n margin: 0;\n overflow-wrap: break-word;\n word-break: break-word;\n hyphens: auto;\n line-height: 1.4;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n text-align: left;\n }\n\n ${CourierInboxListItem.id} .title {\n font-family: ${list?.item?.title?.family ?? 'inherit'};\n font-size: ${list?.item?.title?.size ?? '14px'};\n color: ${list?.item?.title?.color ?? 'red'};\n margin-bottom: 4px;\n }\n\n ${CourierInboxListItem.id} .subtitle {\n font-family: ${list?.item?.subtitle?.family ?? 'inherit'};\n font-size: ${list?.item?.subtitle?.size ?? '14px'};\n color: ${list?.item?.subtitle?.color ?? 'red'};\n }\n\n ${CourierInboxListItem.id} .time {\n font-family: ${list?.item?.time?.family ?? 'inherit'};\n font-size: ${list?.item?.time?.size ?? '14px'};\n color: ${list?.item?.time?.color ?? 'red'};\n text-align: right;\n white-space: nowrap;\n }\n\n ${CourierInboxListItem.id} courier-inbox-list-item-menu {\n z-index: 1;\n position: absolute;\n top: 8px;\n right: 8px;\n display: none;\n }\n\n ${CourierInboxListItem.id} .actions-container {\n display: flex;\n margin-top: 10px;\n flex-wrap: wrap;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n display: none;\n }\n `;\n\n }\n\n private _setupHoverBehavior(): void {\n // Only show menu on hover for non-mobile devices and if canClick\n if (!this._isMobile) {\n this.addEventListener('mouseenter', () => {\n this._isLongPress = false;\n this._showMenu();\n });\n this.addEventListener('mouseleave', () => this._hideMenu());\n }\n }\n\n private _setupLongPressBehavior(): void {\n const menu = this._theme.inbox?.list?.item?.menu\n\n if (!menu?.enabled) {\n return;\n }\n\n const longPress = menu.longPress;\n\n this.addEventListener(\n 'touchstart',\n () => {\n // Start long press timer\n this._longPressTimeout = window.setTimeout(() => {\n this._isLongPress = true;\n this._showMenu();\n if (this._message && this.onItemLongPress) {\n this.onItemLongPress(this._message);\n // Vibrate device if supported\n if (navigator.vibrate) {\n navigator.vibrate(longPress?.vibrationDuration ?? 50);\n }\n }\n // Keep the menu visible for 2 s, then hide again\n setTimeout(() => {\n this._hideMenu();\n this._isLongPress = false;\n }, longPress?.displayDuration ?? 2000);\n }, 650);\n },\n { passive: true },\n );\n\n this.addEventListener('touchend', () => {\n // Clear long press timeout\n if (this._longPressTimeout) {\n window.clearTimeout(this._longPressTimeout);\n this._longPressTimeout = null;\n }\n });\n }\n\n 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._actionsContainer.innerHTML = \"\"; // Clear previous actions to avoid duplicates\n this._message.actions.forEach(action => {\n // Create the action element\n const actionButton = new CourierButton({\n mode: this._themeManager.mode,\n text: action.content,\n variant: 'secondary',\n backgroundColor: actionsTheme?.backgroundColor,\n hoverBackgroundColor: actionsTheme?.hoverBackgroundColor,\n activeBackgroundColor: actionsTheme?.activeBackgroundColor,\n border: actionsTheme?.border,\n borderRadius: actionsTheme?.borderRadius,\n shadow: actionsTheme?.shadow,\n fontFamily: actionsTheme?.font?.family,\n fontSize: actionsTheme?.font?.size,\n fontWeight: actionsTheme?.font?.weight,\n textColor: actionsTheme?.font?.color,\n onClick: () => {\n if (this._message && this.onItemActionClick) {\n this.onItemActionClick(this._message, action);\n }\n },\n });\n\n // Add the action element to the actions container\n this._actionsContainer?.appendChild(actionButton);\n });\n }\n }\n}\n\nregisterElement(CourierInboxListItem);","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list-item';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonListItem.id, CourierInboxSkeletonListItem.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n // Create skeleton items using CourierSkeletonAnimatedRow\n const firstRow = new CourierSkeletonAnimatedRow(this._theme);\n const secondRow = new CourierSkeletonAnimatedRow(this._theme);\n const thirdRow = new CourierSkeletonAnimatedRow(this._theme);\n\n this.appendChild(firstRow);\n this.appendChild(secondRow);\n this.appendChild(thirdRow);\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxSkeletonListItem.id} {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n width: 100%;\n box-sizing: border-box;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:first-child {\n width: 35%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(2) {\n width: 100%;\n }\n\n ${CourierInboxSkeletonListItem.id} > *:nth-child(3) {\n width: 82%;\n }\n `;\n }\n}\n\n// Register the custom element\nregisterElement(CourierInboxSkeletonListItem);\n\nclass CourierSkeletonAnimatedRow extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-skeleton-animated-row';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierSkeletonAnimatedRow.id, CourierSkeletonAnimatedRow.getStyles(this._theme));\n this.render();\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n private render() {\n const skeletonItem = document.createElement('div');\n skeletonItem.className = 'skeleton-item';\n this.appendChild(skeletonItem);\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n const color = theme.inbox?.loading?.animation?.barColor ?? '#000';\n\n // Handle both 3 and 6 character hex colors\n const hexColor = color.length === 4 ?\n `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` :\n color;\n\n // Convert hex to RGB\n const r = parseInt(hexColor.slice(1, 3), 16);\n const g = parseInt(hexColor.slice(3, 5), 16);\n const b = parseInt(hexColor.slice(5, 7), 16);\n\n const colorWithAlpha80 = `rgba(${r}, ${g}, ${b}, 0.8)`; // 80% opacity\n const colorWithAlpha40 = `rgba(${r}, ${g}, ${b}, 0.4)`; // 40% opacity\n\n return `\n ${CourierSkeletonAnimatedRow.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n }\n\n ${CourierSkeletonAnimatedRow.id} .skeleton-item {\n height: ${theme.inbox?.loading?.animation?.barHeight ?? '14px'};\n width: 100%;\n background: linear-gradient(\n 90deg,\n ${colorWithAlpha80} 25%,\n ${colorWithAlpha40} 50%,\n ${colorWithAlpha80} 75%\n );\n background-size: 200% 100%;\n animation: ${CourierSkeletonAnimatedRow.id}-shimmer ${theme.inbox?.loading?.animation?.duration ?? '2s'} ease-in-out infinite;\n border-radius: ${theme.inbox?.loading?.animation?.barBorderRadius ?? '14px'};\n }\n\n @keyframes ${CourierSkeletonAnimatedRow.id}-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n `;\n }\n}\n\nregisterElement(CourierSkeletonAnimatedRow);\n","import { CourierFactoryElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxSkeletonListItem } from \"./courier-inbox-skeleton-list-item\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonList extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-skeleton-list';\n }\n\n private _theme: CourierInboxTheme;\n private _style?: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxSkeletonList.id, CourierInboxSkeletonList.getStyles(this._theme));\n }\n\n onComponentUnmounted() {\n this._style?.remove();\n }\n\n defaultElement(): HTMLElement {\n const list = document.createElement('div');\n list.className = 'list';\n\n // Create skeleton items\n for (let i = 0; i < 3; i++) {\n const skeletonItem = new CourierInboxSkeletonListItem(this._theme); // TODO: Make this a prop\n list.appendChild(skeletonItem);\n }\n\n this.appendChild(list);\n return list;\n\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxSkeletonList.id} {\n display: flex;\n height: 100%;\n width: 100%;\n align-items: flex-start;\n justify-content: flex-start;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list {\n display: flex;\n flex-direction: column;\n width: 100%;\n overflow: hidden;\n }\n\n ${CourierInboxSkeletonList.id} .list > * {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 100%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(2) {\n border-bottom: ${theme.inbox?.loading?.divider ?? '1px solid red'};\n opacity: 88%;\n }\n\n ${CourierInboxSkeletonList.id} .list > *:nth-child(3) {\n border-bottom: none;\n opacity: 50%;\n }\n `;\n\n }\n}\n\nregisterElement(CourierInboxSkeletonList);\n","import { CourierBaseElement, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxSkeletonList } from \"./courier-inbox-skeleton-list\";\n\nexport class CourierInboxPaginationListItem extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-pagination-list-item';\n }\n\n // State\n private _theme: CourierInboxTheme;\n\n // Components\n private _style?: HTMLStyleElement;\n private _skeletonLoadingList?: CourierInboxSkeletonList;\n private _observer?: IntersectionObserver;\n private _customItem?: HTMLElement;\n\n // Handlers\n private _onPaginationTrigger: () => void;\n\n constructor(props: { theme: CourierInboxTheme, customItem?: HTMLElement, onPaginationTrigger: () => void }) {\n super();\n this._theme = props.theme;\n this._customItem = props.customItem;\n this._onPaginationTrigger = props.onPaginationTrigger;\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxPaginationListItem.id, CourierInboxPaginationListItem.getStyles(this._theme));\n\n if (this._customItem) {\n this.appendChild(this._customItem);\n } else {\n const container = document.createElement('div');\n container.className = 'skeleton-container';\n\n this._skeletonLoadingList = new CourierInboxSkeletonList(this._theme);\n this._skeletonLoadingList.build(undefined);\n container.appendChild(this._skeletonLoadingList);\n\n this.appendChild(container);\n }\n\n // Initialize intersection observer\n this._observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n this._onPaginationTrigger();\n }\n });\n });\n\n // Start observing the element\n this._observer.observe(this);\n\n }\n\n onComponentUnmounted() {\n this._observer?.disconnect();\n this._style?.remove();\n }\n\n static getStyles(_theme: CourierInboxTheme): string {\n return `\n ${CourierInboxPaginationListItem.id} {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n }\n\n ${CourierInboxPaginationListItem.id} .skeleton-container {\n height: 150%;\n }\n `;\n }\n\n}\n\nregisterElement(CourierInboxPaginationListItem);\n","import { 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 private _canClickListItems = false;\n private _canLongPressListItems = false;\n\n // Callbacks\n private _onMessageClick: ((message: InboxMessage, index: number) => void) | null = null;\n private _onMessageActionClick: ((message: InboxMessage, action: InboxAction, index: number) => void) | null = null;\n private _onMessageLongPress: ((message: InboxMessage, index: number) => void) | null = null;\n private _onRefresh: () => void;\n\n // Factories\n private _onPaginationTrigger?: (feedType: CourierInboxFeedType) => void;\n private _listItemFactory?: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement;\n private _paginationItemFactory?: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement;\n private _loadingStateFactory?: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement;\n private _emptyStateFactory?: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement;\n private _errorStateFactory?: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement;\n\n // Getters\n public get messages(): InboxMessage[] {\n return this._messages;\n }\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n // Components\n private _listStyles?: HTMLStyleElement;\n private _listItemStyles?: HTMLStyleElement;\n private _listItemMenuStyles?: HTMLStyleElement;\n private _errorContainer?: CourierInfoState;\n private _emptyContainer?: CourierInfoState;\n\n constructor(props: {\n themeManager: CourierInboxThemeManager,\n canClickListItems: boolean,\n canLongPressListItems: boolean,\n onRefresh: () => void,\n onPaginationTrigger: (feedType: CourierInboxFeedType) => void,\n onMessageClick: (message: InboxMessage, index: number) => void,\n onMessageActionClick: (message: InboxMessage, action: InboxAction, index: number) => void,\n onMessageLongPress: (message: InboxMessage, index: number) => void\n }) {\n super();\n\n // Initialize the callbacks\n this._onRefresh = props.onRefresh;\n this._onPaginationTrigger = props.onPaginationTrigger;\n this._onMessageClick = props.onMessageClick;\n this._onMessageActionClick = props.onMessageActionClick;\n this._onMessageLongPress = props.onMessageLongPress;\n\n // Initialize the theme subscription\n this._themeSubscription = props.themeManager.subscribe((_: CourierInboxTheme) => {\n this.render();\n });\n\n }\n\n onComponentMounted() {\n\n // Inject styles at head\n // Since list items and menus don't listen to theme changes directly, their styles are created\n // at the parent level, and the parent manages their theming updates.\n this._listStyles = injectGlobalStyle(CourierInboxList.id, CourierInboxList.getStyles(this.theme));\n this._listItemStyles = injectGlobalStyle(CourierInboxListItem.id, CourierInboxListItem.getStyles(this.theme));\n this._listItemMenuStyles = injectGlobalStyle(CourierInboxListItemMenu.id, CourierInboxListItemMenu.getStyles(this.theme));\n\n // Layout the component\n this.render();\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._listStyles?.remove();\n this._listItemStyles?.remove();\n this._listItemMenuStyles?.remove();\n }\n\n public setCanClickListItems(canClick: boolean) {\n this._canClickListItems = canClick;\n }\n\n public setCanLongPressListItems(canLongPress: boolean) {\n this._canLongPressListItems = canLongPress;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n const list = theme.inbox?.list;\n\n return `\n ${CourierInboxList.id} {\n flex: 1;\n width: 100%;\n background-color: ${list?.backgroundColor ?? 'red'};\n }\n\n ${CourierInboxList.id} ul {\n list-style: none;\n padding: 0;\n margin: 0;\n height: 100%;\n }\n `;\n\n }\n\n public setDataSet(dataSet: InboxDataSet): void {\n this._messages = [...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addPage(dataSet: InboxDataSet): void {\n this._messages = [...this._messages, ...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addMessage(message: InboxMessage, index = 0): void {\n this._messages.splice(index, 0, message);\n this.render();\n }\n\n public removeMessage(index = 0): void {\n this._messages.splice(index, 1);\n this.render();\n }\n\n public updateMessage(message: InboxMessage, index = 0): void {\n this._messages[index] = message;\n this.render();\n }\n\n public setFeedType(feedType: CourierInboxFeedType): void {\n this._feedType = feedType;\n this._error = null;\n this._isLoading = true;\n this.render();\n }\n\n public setLoading(isLoading: boolean): void {\n this._error = null;\n this._isLoading = isLoading;\n this.render();\n }\n\n public setError(error: Error | null): void {\n this._error = error;\n this._isLoading = false;\n this._messages = [];\n this.render();\n }\n\n public setErrorNoClient(): void {\n this.setError(new Error('No user signed in'));\n }\n\n private handleRetry(): void {\n this._onRefresh();\n }\n\n private handleRefresh(): void {\n this._onRefresh();\n }\n\n public refreshInfoStateThemes() {\n this._emptyContainer?.updateStyles(this.errorProps);\n this._emptyContainer?.updateStyles(this.emptyProps);\n }\n\n get errorProps(): any {\n const error = this.theme.inbox?.error;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: error?.title?.text ?? this._error?.message,\n textColor: error?.title?.font?.color,\n fontFamily: error?.title?.font?.family,\n fontSize: error?.title?.font?.size,\n fontWeight: error?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: error?.button?.text,\n backgroundColor: error?.button?.backgroundColor,\n hoverBackgroundColor: error?.button?.hoverBackgroundColor,\n activeBackgroundColor: error?.button?.activeBackgroundColor,\n textColor: error?.button?.font?.color,\n fontFamily: error?.button?.font?.family,\n fontSize: error?.button?.font?.size,\n fontWeight: error?.button?.font?.weight,\n shadow: error?.button?.shadow,\n border: error?.button?.border,\n borderRadius: error?.button?.borderRadius,\n onClick: () => this.handleRetry()\n }\n };\n }\n\n get emptyProps(): any {\n const empty = this.theme.inbox?.empty;\n const themeMode = this._themeSubscription.manager.mode;\n return {\n title: {\n text: empty?.title?.text ?? `No ${this._feedType} messages yet`,\n textColor: empty?.title?.font?.color,\n fontFamily: empty?.title?.font?.family,\n fontSize: empty?.title?.font?.size,\n fontWeight: empty?.title?.font?.weight\n },\n button: {\n mode: themeMode,\n text: empty?.button?.text,\n backgroundColor: empty?.button?.backgroundColor,\n hoverBackgroundColor: empty?.button?.hoverBackgroundColor,\n activeBackgroundColor: empty?.button?.activeBackgroundColor,\n textColor: empty?.button?.font?.color,\n fontFamily: empty?.button?.font?.family,\n fontSize: empty?.button?.font?.size,\n fontWeight: empty?.button?.font?.weight,\n shadow: empty?.button?.shadow,\n border: empty?.button?.border,\n borderRadius: empty?.button?.borderRadius,\n onClick: () => this.handleRefresh()\n },\n };\n }\n\n private render(): void {\n\n // Remove all existing elements\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n this._errorContainer = undefined;\n this._emptyContainer = undefined;\n }\n\n // Update list styles\n if (this._listStyles) {\n this._listStyles.textContent = CourierInboxList.getStyles(this.theme);\n }\n\n // Update list item styles\n if (this._listItemStyles) {\n this._listItemStyles.textContent = CourierInboxListItem.getStyles(this.theme);\n }\n\n // Update list item menu styles\n if (this._listItemMenuStyles) {\n this._listItemMenuStyles.textContent = CourierInboxListItemMenu.getStyles(this.theme);\n }\n\n // Error state\n if (this._error) {\n this._errorContainer = new CourierInfoState(this.errorProps);\n this._errorContainer.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n this.appendChild(this._errorContainer);\n return;\n }\n\n // Loading state\n if (this._isLoading) {\n const loadingElement = new CourierInboxSkeletonList(this.theme);\n loadingElement.build(this._loadingStateFactory?.({ feedType: this._feedType }));\n this.appendChild(loadingElement);\n return;\n }\n\n // Empty state\n if (this._messages.length === 0) {\n this._emptyContainer = new CourierInfoState(this.emptyProps);\n this._emptyContainer.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n this.appendChild(this._emptyContainer);\n return;\n }\n\n // Create list before adding messages\n const list = document.createElement('ul');\n this.appendChild(list);\n\n // Add messages to the list\n this._messages.forEach((message, index) => {\n if (this._listItemFactory) {\n list.appendChild(this._listItemFactory({ message, index }));\n return;\n }\n const listItem = new CourierInboxListItem(this._themeSubscription.manager, this._canClickListItems, this._canLongPressListItems);\n listItem.setMessage(message, this._feedType);\n listItem.setOnItemClick((message) => this._onMessageClick?.(message, index));\n listItem.setOnItemActionClick((message, action) => this._onMessageActionClick?.(message, action, index));\n listItem.setOnItemLongPress((message) => this._onMessageLongPress?.(message, index));\n 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: 3px 8px;\n font-size: 12px;\n text-align: center;\n display: none;\n pointer-events: none;\n min-width: 20px;\n }\n\n ${CourierUnreadCountBadge.id} .header {\n background-color: ${theme.inbox?.header?.filters?.unreadIndicator?.backgroundColor};\n color: ${theme.inbox?.header?.filters?.unreadIndicator?.font?.color};\n border-radius: ${theme.inbox?.header?.filters?.unreadIndicator?.borderRadius};\n font-size: ${theme.inbox?.header?.filters?.unreadIndicator?.font?.size};\n padding: ${theme.inbox?.header?.filters?.unreadIndicator?.padding};\n }\n `\n }\n\n public setCount(count: number) {\n this._count = count;\n this.updateBadge();\n }\n\n public refreshTheme(location: CourierUnreadCountLocation) {\n this._location = location;\n this.updateBadge();\n }\n\n private updateBadge() {\n if (this._badge) {\n if (this._count > 0) {\n this._badge.textContent = this._count > 99 ? '99+' : this._count.toString();\n this._badge.style.display = 'block';\n } else {\n this._badge.style.display = 'none';\n }\n }\n }\n}\n\nregisterElement(CourierUnreadCountBadge);\n","import { CourierBaseElement, CourierIcon, CourierIconSVGs, injectGlobalStyle, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\nimport { CourierUnreadCountBadge } from \"./courier-unread-count-badge\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxHeaderTitle extends CourierBaseElement {\n\n static get id(): string {\n return 'courier-inbox-header-title';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _option: CourierInboxMenuOption;\n private _feedType?: CourierInboxFeedType;\n\n // Components\n private _style?: HTMLStyleElement;\n private _titleElement?: HTMLHeadingElement;\n private _iconElement?: CourierIcon;\n private _unreadBadge?: CourierUnreadCountBadge;\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(themeManager: CourierInboxThemeManager, option: CourierInboxMenuOption) {\n super();\n\n this._option = option;\n\n // Subscribe to the theme bus\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme(this._feedType ?? 'inbox');\n });\n\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxHeaderTitle.id} {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n }\n\n ${CourierInboxHeaderTitle.id} courier-icon {\n display: flex;\n align-items: center;\n }\n\n ${CourierInboxHeaderTitle.id} h2 {\n margin: 0;\n font-family: ${theme.inbox?.header?.filters?.font?.family ?? 'inherit'};\n font-size: ${theme.inbox?.header?.filters?.font?.size ?? '18px'};\n font-weight: ${theme.inbox?.header?.filters?.font?.weight ?? '500'};\n color: ${theme.inbox?.header?.filters?.font?.color ?? 'red'};\n }\n\n ${CourierInboxHeaderTitle.id} courier-unread-count-badge {\n margin-left: 4px;\n }\n `;\n }\n\n onComponentMounted() {\n\n this._style = injectGlobalStyle(CourierInboxHeaderTitle.id, CourierInboxHeaderTitle.getStyles(this.theme));\n\n this._iconElement = new CourierIcon(undefined, this._option.icon.svg);\n this._titleElement = document.createElement('h2');\n this._unreadBadge = new CourierUnreadCountBadge({\n themeBus: this._themeSubscription.manager,\n location: 'header'\n });\n\n this.appendChild(this._iconElement);\n this.appendChild(this._titleElement);\n this.appendChild(this._unreadBadge);\n\n this.refreshTheme(this._feedType ?? 'inbox');\n\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private refreshTheme(feedType: CourierInboxFeedType) {\n this._feedType = feedType;\n if (this._style) {\n this._style.textContent = CourierInboxHeaderTitle.getStyles(this.theme);\n }\n this._unreadBadge?.refreshTheme('header');\n this.updateFilter();\n }\n\n public updateSelectedOption(option: CourierInboxMenuOption, feedType: CourierInboxFeedType, unreadCount: number) {\n this._option = option;\n this._feedType = feedType;\n this._unreadBadge?.setCount(unreadCount);\n this.updateFilter();\n }\n\n private updateFilter() {\n const theme = this._themeSubscription.manager.getTheme();\n switch (this._feedType) {\n case 'inbox':\n if (this._titleElement) {\n this._titleElement.textContent = theme.inbox?.header?.filters?.inbox?.text ?? 'Inbox';\n }\n this._iconElement?.updateSVG(theme.inbox?.header?.filters?.inbox?.icon?.svg ?? CourierIconSVGs.inbox);\n this._iconElement?.updateColor(theme.inbox?.header?.filters?.inbox?.icon?.color ?? 'red');\n break;\n case 'archive':\n if (this._titleElement) {\n this._titleElement.textContent = theme.inbox?.header?.filters?.archive?.text ?? 'Archive';\n }\n this._iconElement?.updateSVG(theme.inbox?.header?.filters?.archive?.icon?.svg ?? CourierIconSVGs.archive);\n this._iconElement?.updateColor(theme.inbox?.header?.filters?.archive?.icon?.color ?? 'red');\n break;\n }\n }\n}\n\nregisterElement(CourierInboxHeaderTitle);","import { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierIconSVGs, CourierFactoryElement, registerElement, CourierColors, injectGlobalStyle } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxOptionMenu, CourierInboxMenuOption } from \"./courier-inbox-option-menu\";\nimport { CourierInboxHeaderTitle } from \"./courier-inbox-header-title\";\nimport { CourierInboxHeaderFactoryProps } from \"../types/factories\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxHeaderMenuItemId = CourierInboxFeedType | 'markAllRead' | 'archiveAll' | 'archiveRead';\n\nexport class CourierInboxHeader extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-header';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _feedType: CourierInboxFeedType = 'inbox';\n private _unreadCount: number = 0;\n\n // Components\n private _titleSection?: CourierInboxHeaderTitle;\n private _filterMenu?: CourierInboxOptionMenu;\n private _actionMenu?: CourierInboxOptionMenu;\n private _style?: HTMLStyleElement;\n\n // Callbacks\n private _onFeedTypeChange: (feedType: CourierInboxFeedType) => void;\n\n static get observedAttributes() {\n return ['icon', 'title', 'feed-type'];\n }\n\n private get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(props: { themeManager: CourierInboxThemeManager, onFeedTypeChange: (feedType: CourierInboxFeedType) => void }) {\n super();\n\n // Subscribe to the theme bus\n this._themeSubscription = props.themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Set the on feed type change callback\n this._onFeedTypeChange = props.onFeedTypeChange;\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxHeader.id, CourierInboxHeader.getStyles(this.theme));\n }\n\n onComponentUmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n private getFilterOptions(): CourierInboxMenuOption[] {\n const theme = this._themeSubscription.manager.getTheme();\n const filterMenu = theme.inbox?.header?.menus?.filters;\n\n return [\n {\n id: 'inbox',\n text: filterMenu?.inbox?.text ?? 'Inbox',\n icon: {\n color: filterMenu?.inbox?.icon?.color ?? 'red',\n svg: filterMenu?.inbox?.icon?.svg ?? CourierIconSVGs.inbox\n },\n selectionIcon: {\n color: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.color ?? 'red',\n svg: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.svg ?? CourierIconSVGs.check\n },\n onClick: (option: CourierInboxMenuOption) => {\n this.handleOptionMenuItemClick('inbox', option);\n }\n },\n {\n id: 'archive',\n text: filterMenu?.archive?.text ?? 'Archive',\n icon: {\n color: filterMenu?.archive?.icon?.color ?? 'red',\n svg: filterMenu?.archive?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: {\n color: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.color ?? 'red',\n svg: theme.inbox?.header?.menus?.popup?.list?.selectionIcon?.svg ?? CourierIconSVGs.check\n },\n onClick: (option: CourierInboxMenuOption) => {\n this.handleOptionMenuItemClick('archive', option);\n }\n }\n ];\n }\n\n private getActionOptions(): CourierInboxMenuOption[] {\n const theme = this._themeSubscription.manager.getTheme();\n const actionMenu = theme.inbox?.header?.menus?.actions;\n\n return [\n {\n id: 'markAllRead',\n text: actionMenu?.markAllRead?.text ?? 'Mark All as Read',\n icon: {\n color: actionMenu?.markAllRead?.icon?.color ?? 'red',\n svg: actionMenu?.markAllRead?.icon?.svg ?? CourierIconSVGs.inbox\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.readAllMessages({ canCallApi: true });\n }\n },\n {\n id: 'archiveAll',\n text: actionMenu?.archiveAll?.text ?? 'Archive All',\n icon: {\n color: actionMenu?.archiveAll?.icon?.color ?? 'red',\n svg: actionMenu?.archiveAll?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.archiveAllMessages({ canCallApi: true });\n }\n },\n {\n id: 'archiveRead',\n text: actionMenu?.archiveRead?.text ?? 'Archive Read',\n icon: {\n color: actionMenu?.archiveRead?.icon?.color ?? 'red',\n svg: actionMenu?.archiveRead?.icon?.svg ?? CourierIconSVGs.archive\n },\n selectionIcon: null,\n onClick: (_: CourierInboxMenuOption) => {\n CourierInboxDatastore.shared.archiveReadMessages({ canCallApi: true });\n }\n }\n ];\n }\n\n private refreshTheme() {\n\n if (this._style) {\n this._style.textContent = CourierInboxHeader.getStyles(this.theme);\n }\n\n // Update menus\n this._filterMenu?.setOptions(this.getFilterOptions());\n this._actionMenu?.setOptions(this.getActionOptions());\n }\n\n private handleOptionMenuItemClick(feedType: CourierInboxFeedType, option: CourierInboxMenuOption) {\n this._feedType = feedType;\n if (this._titleSection) {\n this._titleSection.updateSelectedOption(option, this._feedType, this._feedType === 'inbox' ? this._unreadCount : 0);\n }\n this._onFeedTypeChange(feedType);\n }\n\n public render(props: CourierInboxHeaderFactoryProps): void {\n this._feedType = props.feedType;\n this._unreadCount = props.unreadCount;\n const option = this.getFilterOptions().find(opt => ['inbox', 'archive'].includes(opt.id) && opt.id === this._feedType);\n if (option) {\n this._titleSection?.updateSelectedOption(option, this._feedType, this._feedType === 'inbox' ? this._unreadCount : 0);\n this._filterMenu?.selectOption(option);\n }\n }\n\n build(newElement: HTMLElement | undefined | null) {\n super.build(newElement);\n this.refreshTheme();\n }\n\n defaultElement(): HTMLElement {\n const filterOptions = this.getFilterOptions();\n\n this._titleSection = new CourierInboxHeaderTitle(this._themeSubscription.manager, filterOptions[0]);\n this._filterMenu = new CourierInboxOptionMenu(this._themeSubscription.manager, 'filters', true, filterOptions, () => {\n this._actionMenu?.closeMenu();\n });\n this._actionMenu = new CourierInboxOptionMenu(this._themeSubscription.manager, 'actions', false, this.getActionOptions(), () => {\n this._filterMenu?.closeMenu();\n });\n\n // Selected default menu\n this._filterMenu.selectOption(filterOptions[0]);\n\n // Create flexible spacer\n const spacer = document.createElement('div');\n spacer.className = 'spacer';\n\n // Create and setup actions section\n const actions = document.createElement('div');\n actions.className = 'actions';\n actions.appendChild(this._filterMenu);\n actions.appendChild(this._actionMenu);\n\n const headerContent = document.createElement('div');\n headerContent.className = 'header-content';\n headerContent.appendChild(this._titleSection);\n headerContent.appendChild(spacer);\n headerContent.appendChild(actions);\n\n return headerContent;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n\n return `\n ${CourierInboxHeader.id} {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n ${CourierInboxHeader.id} .header-content {\n padding: 10px 10px 10px 16px;\n background-color: ${theme.inbox?.header?.backgroundColor ?? CourierColors.white[500]};\n box-shadow: ${theme.inbox?.header?.shadow ?? `0px 1px 0px 0px red`};\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 1;\n z-index: 100;\n }\n\n ${CourierInboxHeader.id} .spacer {\n flex: 1;\n }\n\n ${CourierInboxHeader.id} .actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n `;\n }\n\n}\n\nregisterElement(CourierInboxHeader);\n","import { CourierInboxDatastore } from \"./datastore\";\nimport { CourierInboxDatastoreEvents } from \"./datatore-events\";\n\nexport class CourierInboxDataStoreListener {\n readonly events: CourierInboxDatastoreEvents;\n\n constructor(events: CourierInboxDatastoreEvents) {\n this.events = events;\n }\n\n remove() {\n CourierInboxDatastore.shared.removeDataStoreListener(this);\n }\n\n}\n","import { CourierColors, CourierIconSVGs, SystemThemeMode } 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 CourierInboxUnreadDotIndicatorTheme = {\n backgroundColor?: string;\n borderRadius?: string;\n height?: string;\n width?: string;\n}\n\nexport type CourierInboxUnreadCountIndicatorTheme = {\n font?: CourierInboxFontTheme;\n backgroundColor?: string;\n borderRadius?: string;\n padding?: string;\n}\n\nexport type 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 unreadDotIndicator?: CourierInboxUnreadDotIndicatorTheme;\n}\n\nexport type CourierInboxPopupTheme = {\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n list?: {\n font?: CourierInboxFontTheme;\n selectionIcon?: CourierInboxIconTheme;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n divider?: string;\n };\n}\n\nexport type CourierInboxListItemTheme = {\n unreadIndicatorColor?: string;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n title?: CourierInboxFontTheme;\n subtitle?: CourierInboxFontTheme;\n time?: CourierInboxFontTheme;\n archiveIcon?: CourierInboxIconTheme;\n divider?: string;\n actions?: {\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n font?: CourierInboxFontTheme;\n }\n menu?: {\n enabled?: boolean;\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n longPress?: {\n displayDuration?: number;\n vibrationDuration?: number;\n };\n item?: {\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n borderRadius?: string;\n read?: CourierInboxIconTheme;\n unread?: CourierInboxIconTheme;\n archive?: CourierInboxIconTheme;\n unarchive?: CourierInboxIconTheme;\n };\n };\n}\n\nexport type CourierInboxSkeletonLoadingStateTheme = {\n animation?: {\n barColor?: string;\n barHeight?: string;\n barBorderRadius?: string;\n duration?: string;\n },\n divider?: string;\n}\n\nexport type CourierInboxInfoStateTheme = {\n title?: {\n font?: CourierInboxFontTheme;\n text?: string;\n },\n button?: CourierInboxButtonTheme;\n}\n\nexport type CourierMenuItemTheme = {\n icon?: CourierInboxIconTheme;\n text?: string;\n}\n\nexport type CourierFilterMenuTheme = {\n button?: CourierInboxIconButtonTheme;\n inbox?: CourierMenuItemTheme;\n archive?: CourierMenuItemTheme;\n}\n\nexport type CourierActionMenuTheme = {\n button?: CourierInboxIconButtonTheme;\n markAllRead?: CourierMenuItemTheme;\n archiveAll?: CourierMenuItemTheme;\n archiveRead?: CourierMenuItemTheme;\n}\n\nexport type CourierInboxTheme = {\n popup?: {\n button?: CourierInboxMenuButtonTheme;\n window?: {\n backgroundColor?: string;\n borderRadius?: string;\n border?: string;\n shadow?: string;\n };\n }\n inbox?: {\n header?: {\n backgroundColor?: string;\n shadow?: string;\n filters?: {\n font?: CourierInboxFontTheme;\n inbox?: CourierInboxFilterItemTheme;\n archive?: CourierInboxFilterItemTheme;\n unreadIndicator?: CourierInboxUnreadCountIndicatorTheme;\n }\n menus?: {\n popup?: CourierInboxPopupTheme;\n filters?: CourierFilterMenuTheme;\n actions?: CourierActionMenuTheme;\n }\n }\n list?: {\n backgroundColor?: string;\n item?: CourierInboxListItemTheme;\n },\n loading?: CourierInboxSkeletonLoadingStateTheme,\n empty?: CourierInboxInfoStateTheme,\n error?: CourierInboxInfoStateTheme\n }\n};\n\nexport const defaultLightTheme: CourierInboxTheme = {\n popup: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n unreadDotIndicator: {\n backgroundColor: CourierColors.blue[500],\n borderRadius: '50%',\n height: '8px',\n width: '8px',\n }\n },\n window: {\n backgroundColor: CourierColors.white[500],\n borderRadius: '8px',\n border: `1px solid ${CourierColors.gray[500]}`,\n shadow: `0px 8px 16px -4px ${CourierColors.gray[500]}`\n }\n },\n inbox: {\n header: {\n backgroundColor: CourierColors.white[500],\n shadow: `0px 1px 0px 0px ${CourierColors.gray[500]}`,\n filters: {\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '18px'\n },\n inbox: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n },\n unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '12px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '4px',\n padding: '2px 6px',\n }\n },\n menus: {\n popup: {\n backgroundColor: CourierColors.white[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: `0px 4px 8px -2px ${CourierColors.gray[500]}`,\n list: {\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n divider: `none`,\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n },\n selectionIcon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.check\n }\n }\n },\n filters: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.filter\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n },\n inbox: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n }\n },\n actions: {\n button: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.overflow\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.black[500_10],\n activeBackgroundColor: CourierColors.black[500_20],\n },\n markAllRead: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.read\n },\n text: 'Read All'\n },\n archiveAll: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive All'\n },\n archiveRead: {\n icon: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archiveRead\n },\n text: 'Archive Read'\n }\n },\n }\n },\n list: {\n backgroundColor: CourierColors.white[500],\n item: {\n backgroundColor: 'transparent',\n unreadIndicatorColor: CourierColors.blue[500],\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n actions: {\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: '0px 1px 2px 0px rgba(0, 0, 0, 0.06)',\n font: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n }\n },\n title: {\n color: CourierColors.black[500],\n family: undefined,\n size: '14px'\n },\n subtitle: {\n color: CourierColors.gray[600],\n family: undefined,\n size: '14px'\n },\n time: {\n color: CourierColors.gray[600],\n family: undefined,\n size: '14px'\n },\n divider: `1px solid ${CourierColors.gray[200]}`,\n menu: {\n enabled: true,\n backgroundColor: CourierColors.white[500],\n border: `1px solid ${CourierColors.gray[500]}`,\n borderRadius: '4px',\n shadow: `0px 2px 4px -2px ${CourierColors.gray[500]}`,\n longPress: {\n displayDuration: 4000,\n vibrationDuration: 50\n },\n item: {\n hoverBackgroundColor: CourierColors.gray[200],\n activeBackgroundColor: CourierColors.gray[500],\n borderRadius: '0px',\n read: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.read\n },\n unread: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.unread\n },\n archive: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.archive\n },\n unarchive: {\n color: CourierColors.black[500],\n svg: CourierIconSVGs.unarchive\n }\n }\n }\n }\n },\n loading: {\n animation: {\n barColor: CourierColors.gray[500],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[200]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.black[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.black[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\nexport const defaultDarkTheme: CourierInboxTheme = {\n popup: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n unreadDotIndicator: {\n backgroundColor: CourierColors.blue[500],\n borderRadius: '50%',\n height: '8px',\n width: '8px',\n }\n },\n window: {\n backgroundColor: CourierColors.black[500],\n borderRadius: '8px',\n border: `1px solid ${CourierColors.gray[400]}`,\n shadow: `0px 4px 8px -2px ${CourierColors.white[500_20]}`\n }\n },\n inbox: {\n header: {\n backgroundColor: CourierColors.black[500],\n shadow: `0px 1px 0px 0px ${CourierColors.gray[400]}`,\n filters: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '18px'\n },\n inbox: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n },\n unreadIndicator: {\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '12px'\n },\n backgroundColor: CourierColors.blue[500],\n borderRadius: '4px',\n padding: '3px 8px',\n }\n },\n menus: {\n popup: {\n backgroundColor: CourierColors.black[500],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 4px 8px -2px ${CourierColors.white[500_20]}`,\n list: {\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n divider: `none`,\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n },\n selectionIcon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.check\n }\n }\n },\n filters: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.filter\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n },\n inbox: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.inbox\n },\n text: 'Inbox'\n },\n archive: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive'\n }\n },\n actions: {\n button: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.overflow\n },\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n },\n markAllRead: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.read\n },\n text: 'Read All'\n },\n archiveAll: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n text: 'Archive All'\n },\n archiveRead: {\n icon: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archiveRead\n },\n text: 'Archive Read'\n }\n },\n }\n },\n list: {\n backgroundColor: CourierColors.black[500],\n item: {\n backgroundColor: 'transparent',\n unreadIndicatorColor: CourierColors.blue[500],\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n actions: {\n backgroundColor: 'transparent',\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 1px 2px 0px ${CourierColors.white[500_10]}`,\n font: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n }\n },\n title: {\n color: CourierColors.white[500],\n family: undefined,\n size: '14px'\n },\n subtitle: {\n color: CourierColors.gray[500],\n family: undefined,\n size: '14px'\n },\n time: {\n color: CourierColors.gray[500],\n family: undefined,\n size: '12px'\n },\n divider: `1px solid ${CourierColors.gray[400]}`,\n menu: {\n enabled: true,\n backgroundColor: CourierColors.black[500],\n border: `1px solid ${CourierColors.gray[400]}`,\n borderRadius: '4px',\n shadow: `0px 2px 4px -2px ${CourierColors.white[500_20]}`,\n longPress: {\n displayDuration: 4000,\n vibrationDuration: 50\n },\n item: {\n hoverBackgroundColor: CourierColors.white[500_10],\n activeBackgroundColor: CourierColors.white[500_20],\n borderRadius: '0px',\n read: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.read\n },\n unread: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.unread\n },\n archive: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.archive\n },\n unarchive: {\n color: CourierColors.white[500],\n svg: CourierIconSVGs.unarchive\n }\n }\n }\n }\n },\n loading: {\n animation: {\n barColor: CourierColors.gray[400],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[400]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\n// Deep merge the themes, only overwriting non-optional properties\nexport const mergeTheme = (mode: SystemThemeMode, theme: CourierInboxTheme): CourierInboxTheme => {\n const defaultTheme = mode === 'light' ? defaultLightTheme : defaultDarkTheme;\n return {\n popup: {\n button: {\n ...defaultTheme.popup?.button,\n ...theme.popup?.button,\n icon: {\n ...defaultTheme.popup?.button?.icon,\n ...theme.popup?.button?.icon\n },\n unreadDotIndicator: {\n ...defaultTheme.popup?.button?.unreadDotIndicator,\n ...theme.popup?.button?.unreadDotIndicator\n }\n },\n window: {\n ...defaultTheme.popup?.window,\n ...theme.popup?.window\n }\n },\n inbox: {\n header: {\n ...defaultTheme.inbox?.header,\n ...theme.inbox?.header,\n filters: {\n ...defaultTheme.inbox?.header?.filters,\n ...theme.inbox?.header?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.filters?.inbox,\n ...theme.inbox?.header?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.inbox?.icon,\n ...theme.inbox?.header?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.filters?.archive,\n ...theme.inbox?.header?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.archive?.icon,\n ...theme.inbox?.header?.filters?.archive?.icon\n }\n },\n unreadIndicator: {\n ...defaultTheme.inbox?.header?.filters?.unreadIndicator,\n ...theme.inbox?.header?.filters?.unreadIndicator\n }\n },\n menus: {\n ...defaultTheme.inbox?.header?.menus,\n ...theme.inbox?.header?.menus,\n popup: {\n ...defaultTheme.inbox?.header?.menus?.popup,\n ...theme.inbox?.header?.menus?.popup,\n list: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list,\n ...theme.inbox?.header?.menus?.popup?.list,\n font: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.font,\n ...theme.inbox?.header?.menus?.popup?.list?.font\n },\n selectionIcon: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.selectionIcon,\n ...theme.inbox?.header?.menus?.popup?.list?.selectionIcon\n }\n }\n },\n filters: {\n ...defaultTheme.inbox?.header?.menus?.filters,\n ...theme.inbox?.header?.menus?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox,\n ...theme.inbox?.header?.menus?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox?.icon,\n ...theme.inbox?.header?.menus?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive,\n ...theme.inbox?.header?.menus?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive?.icon,\n ...theme.inbox?.header?.menus?.filters?.archive?.icon\n }\n }\n },\n actions: {\n ...defaultTheme.inbox?.header?.menus?.actions,\n ...theme.inbox?.header?.menus?.actions,\n markAllRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead,\n ...theme.inbox?.header?.menus?.actions?.markAllRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.markAllRead?.icon\n }\n },\n archiveAll: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll,\n ...theme.inbox?.header?.menus?.actions?.archiveAll,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveAll?.icon\n }\n },\n archiveRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead,\n ...theme.inbox?.header?.menus?.actions?.archiveRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveRead?.icon\n }\n }\n }\n }\n },\n list: {\n ...defaultTheme.inbox?.list,\n ...theme.inbox?.list,\n item: {\n ...defaultTheme.inbox?.list?.item,\n ...theme.inbox?.list?.item,\n menu: {\n ...defaultTheme.inbox?.list?.item?.menu,\n ...theme.inbox?.list?.item?.menu,\n item: {\n ...defaultTheme.inbox?.list?.item?.menu?.item,\n ...theme.inbox?.list?.item?.menu?.item,\n read: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.read,\n ...theme.inbox?.list?.item?.menu?.item?.read\n },\n unread: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unread,\n ...theme.inbox?.list?.item?.menu?.item?.unread\n },\n archive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.archive,\n ...theme.inbox?.list?.item?.menu?.item?.archive\n },\n unarchive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unarchive,\n ...theme.inbox?.list?.item?.menu?.item?.unarchive\n }\n }\n }\n }\n },\n loading: {\n ...defaultTheme.inbox?.loading,\n ...theme.inbox?.loading,\n },\n empty: {\n ...defaultTheme.inbox?.empty,\n ...theme.inbox?.empty\n },\n error: {\n ...defaultTheme.inbox?.error,\n ...theme.inbox?.error\n }\n }\n };\n};\n","import { 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 public get mode(): CourierComponentThemeMode {\n return this._userMode;\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 canClickListItems: false,\n canLongPressListItems: false,\n onRefresh: () => {\n this.refresh();\n },\n onPaginationTrigger: async (feedType: CourierInboxFeedType) => {\n try {\n await CourierInboxDatastore.shared.fetchNextPageOfMessages({\n feedType: feedType\n });\n } catch (error) {\n Courier.shared.client?.options.logger?.error('Failed to fetch next page of messages:', error);\n }\n },\n onMessageClick: (message, index) => {\n CourierInboxDatastore.shared.clickMessage({ message });\n\n this.dispatchEvent(new CustomEvent('message-click', {\n detail: { message, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageClick?.({ message, index });\n },\n onMessageActionClick: (message, action, index) => {\n\n // TODO: Track action click?\n\n this.dispatchEvent(new CustomEvent('message-action-click', {\n detail: { message, action, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageActionClick?.({ message, action, index });\n },\n onMessageLongPress: (message, index) => {\n this.dispatchEvent(new CustomEvent('message-long-press', {\n detail: { message, index },\n bubbles: true,\n composed: true\n }));\n\n this._onMessageLongPress?.({ message, index });\n }\n });\n\n this.refreshTheme();\n\n this.appendChild(this._list);\n\n // Attach the datastore listener\n this._datastoreListener = new CourierInboxDataStoreListener({\n onError: (error: Error) => {\n this._list?.setError(error);\n },\n onDataSetChange: (dataSet: InboxDataSet, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.setDataSet(dataSet);\n this.updateHeader();\n }\n },\n onPageAdded: (dataSet: InboxDataSet, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.addPage(dataSet);\n this.updateHeader();\n }\n },\n onMessageAdd: (message: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.addMessage(message, index);\n this.updateHeader();\n }\n },\n onMessageRemove: (_: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.removeMessage(index);\n this.updateHeader();\n }\n },\n onMessageUpdate: (message: InboxMessage, index: number, feedType: CourierInboxFeedType) => {\n if (this._currentFeed === feedType) {\n this._list?.updateMessage(message, index);\n this.updateHeader();\n }\n },\n onUnreadCountChange: (_: number) => {\n this.updateHeader();\n }\n });\n\n CourierInboxDatastore.shared.addDataStoreListener(this._datastoreListener);\n\n // Refresh the theme on change\n this._themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Listen for authentication state changes\n this._authListener = Courier.shared.addAuthenticationListener((_) => {\n this.refresh();\n });\n\n // Refresh the inbox if the user is already signed in\n if (!Courier.shared.client?.options.userId) {\n Courier.shared.client?.options.logger.error('No user signed in. Please call Courier.shared.signIn(...) to load the inbox.')\n return;\n }\n\n this.refresh();\n\n }\n\n onComponentUnmounted() {\n this._themeManager.cleanup();\n this._datastoreListener?.remove();\n this._authListener?.remove();\n this._inboxStyle?.remove();\n this._unreadIndicatorStyle?.remove();\n }\n\n private refreshTheme() {\n this._list?.refreshInfoStateThemes();\n if (this._inboxStyle) {\n this._inboxStyle.textContent = this.getStyles();\n }\n if (this._unreadIndicatorStyle) {\n this._unreadIndicatorStyle.textContent = CourierUnreadCountBadge.getStyles(this.theme);\n }\n }\n\n private getStyles(): string {\n return `\n ${CourierInbox.id} {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: ${this._defaultProps.height};\n }\n\n ${CourierInbox.id} courier-inbox-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n }\n `;\n }\n\n 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 // Tell the list if we can click. This will update styles if needed.\n this._list?.setCanClickListItems(handler !== undefined);\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 // Tell the list if we can long press. This will update styles if needed.\n this._list?.setCanLongPressListItems(handler !== undefined);\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 { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\n\nexport class CourierInboxMenuButton extends CourierFactoryElement {\n\n static get id(): string {\n return 'courier-inbox-menu-button';\n }\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // Components\n private _style?: HTMLStyleElement;\n private _container?: HTMLDivElement;\n private _triggerButton?: CourierIconButton;\n private _unreadBadge?: HTMLDivElement;\n\n get theme(): CourierInboxTheme {\n return this._themeSubscription.manager.getTheme();\n }\n\n constructor(themeBus: CourierInboxThemeManager) {\n super();\n this._themeSubscription = themeBus.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme();\n });\n }\n\n onComponentMounted() {\n this._style = injectGlobalStyle(CourierInboxMenuButton.id, CourierInboxMenuButton.getStyles(this.theme));\n }\n\n onComponentUnmounted() {\n this._themeSubscription.unsubscribe();\n this._style?.remove();\n }\n\n defaultElement(): HTMLElement {\n\n // Create trigger button container\n this._container = document.createElement('div');\n this._container.className = 'menu-button-container';\n\n // Create trigger button\n this._triggerButton = new CourierIconButton(CourierIconSVGs.inbox);\n\n // Create unread badge (red 4x4 circle)\n this._unreadBadge = document.createElement('div');\n this._unreadBadge.className = 'unread-badge';\n this._unreadBadge.style.display = 'none'; // Hidden by default\n\n this._container.appendChild(this._triggerButton);\n this._container.appendChild(this._unreadBadge);\n this.appendChild(this._container);\n\n // Set the theme of the button\n this.refreshTheme();\n\n return this._container;\n }\n\n static getStyles(theme: CourierInboxTheme): string {\n return `\n ${CourierInboxMenuButton.id} .menu-button-container {\n position: relative;\n display: inline-block;\n }\n \n ${CourierInboxMenuButton.id} .unread-badge {\n position: absolute;\n top: 2px;\n right: 2px;\n pointer-events: none;\n width: ${theme.popup?.button?.unreadDotIndicator?.height ?? '8px'};\n height: ${theme.popup?.button?.unreadDotIndicator?.width ?? '8px'};\n background: ${theme.popup?.button?.unreadDotIndicator?.backgroundColor ?? 'red'};\n border-radius: ${theme.popup?.button?.unreadDotIndicator?.borderRadius ?? '50%'};\n display: none;\n z-index: 1;\n }\n `;\n }\n\n public onUnreadCountChange(unreadCount: number): void {\n if (this._unreadBadge) {\n this._unreadBadge.style.display = unreadCount > 0 ? 'block' : 'none';\n }\n // Optionally, update theme if needed\n this.refreshTheme();\n }\n\n private refreshTheme() {\n this._triggerButton?.updateIconColor(this.theme?.popup?.button?.icon?.color ?? CourierColors.black[500]);\n this._triggerButton?.updateIconSVG(this.theme?.popup?.button?.icon?.svg ?? CourierIconSVGs.inbox);\n this._triggerButton?.updateBackgroundColor(this.theme?.popup?.button?.backgroundColor ?? 'transparent');\n this._triggerButton?.updateHoverBackgroundColor(this.theme?.popup?.button?.hoverBackgroundColor ?? CourierColors.black[500_10]);\n this._triggerButton?.updateActiveBackgroundColor(this.theme?.popup?.button?.activeBackgroundColor ?? CourierColors.black[500_20]);\n }\n\n}\n\nregisterElement(CourierInboxMenuButton);\n","import { CourierInbox } from \"./courier-inbox\";\nimport { CourierInboxDatastoreEvents } from \"../datastore/datatore-events\";\nimport { CourierInboxDataStoreListener } from \"../datastore/datastore-listener\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\nimport { CourierInboxHeaderFactoryProps, CourierInboxListItemActionFactoryProps, CourierInboxListItemFactoryProps, CourierInboxMenuButtonFactoryProps, CourierInboxPaginationItemFactoryProps, CourierInboxStateEmptyFactoryProps, CourierInboxStateErrorFactoryProps, CourierInboxStateLoadingFactoryProps } from \"../types/factories\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxMenuButton } from \"./courier-inbox-menu-button\";\nimport { defaultLightTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxThemeManager } from \"../types/courier-inbox-theme-manager\";\nimport { CourierComponentThemeMode, injectGlobalStyle } from \"@trycourier/courier-ui-core\";\nimport { Courier } from \"@trycourier/courier-js\";\nimport { CourierBaseElement, registerElement } from \"@trycourier/courier-ui-core\";\n\nexport type CourierInboxPopupAlignment = 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center' | 'center-right' | 'center-left' | 'center-center';\n\nexport class CourierInboxPopupMenu extends CourierBaseElement implements CourierInboxDatastoreEvents {\n\n static get id(): string {\n return 'courier-inbox-popup-menu';\n }\n\n // State\n private _width: string = '440px';\n private _height: string = '440px';\n private _popupAlignment: CourierInboxPopupAlignment = 'top-left';\n private _top: string = '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 // Inbox Handlers\n private _onMessageClick?: (props: CourierInboxListItemFactoryProps) => void;\n private _onMessageActionClick?: (props: CourierInboxListItemActionFactoryProps) => void;\n private _onMessageLongPress?: (props: CourierInboxListItemFactoryProps) => void;\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 // Handle click events\n if (this._inbox) {\n this._inbox.onMessageClick((props) => {\n if (this._onMessageClick) {\n this._onMessageClick(props);\n }\n this.closePopup();\n });\n\n this._inbox.onMessageActionClick((props) => {\n if (this._onMessageActionClick) {\n this._onMessageActionClick(props);\n }\n this.closePopup();\n });\n\n this._inbox.onMessageLongPress((props) => {\n if (this._onMessageLongPress) {\n this._onMessageLongPress(props);\n }\n this.closePopup();\n });\n }\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._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 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 public closePopup() {\n if (!this._popup) return;\n this._popup.style.display = 'none';\n }\n\n private handleOutsideClick = (event: MouseEvent) => {\n if (!this._popup) return;\n\n // Nodes the click may legally occur inside without closing the popup\n const SAFE_SELECTORS = [\n 'courier-inbox-option-menu',\n ];\n\n // composedPath() gives us every node (even inside shadow DOMs)\n const clickIsInsideAllowedArea = event\n .composedPath()\n .some(node => {\n if (!(node instanceof HTMLElement)) return false;\n if (node === this._popup || this._popup!.contains(node)) return true;\n return SAFE_SELECTORS.some(sel => node.matches(sel));\n });\n\n if (clickIsInsideAllowedArea) return;\n\n // Otherwise, it really was an outside click – hide the popup\n this._popup.style.display = 'none';\n };\n\n 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","fontFamily","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","themeManager","canClick","_canLongPress","_canClick","_themeManager","getTheme","_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","subscribe","_messages","manager","_listStyles","_listItemStyles","_listItemMenuStyles","unsubscribe","setCanClickListItems","_canClickListItems","setCanLongPressListItems","canLongPress","_canLongPressListItems","setDataSet","_canPaginate","Boolean","_error","_isLoading","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","refreshInfoStateThemes","_emptyContainer","errorProps","emptyProps","themeMode","empty","firstChild","removeChild","_errorContainer","_errorStateFactory","loadingElement","_loadingStateFactory","_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","_E","_D","_C","_B","_A","_K","_J","_I","_H","_G","_F","_Q","_P","_O","_N","_M","_L","_W","_V","_U","_T","_S","_R","_aa","_$","__","_Z","_Y","_X","isFilter","buttonConfig","filters","defaultIcon","refreshMenuItems","menuItem","closeMenu","isOpening","selectOption","o","CourierUnreadCountBadge","_location","location","themeBus","_badge","updateBadge","unreadIndicator","padding","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","unreadDotIndicator","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","_inboxStyle","_unreadIndicatorStyle","_header","_list","canClickListItems","canLongPressListItems","async","bubbles","composed","_datastoreListener","updateHeader","_authListener","addAuthenticationListener","_defaultProps","setHeader","_headerFactory","removeHeader","setLoadingState","setEmptyState","setErrorState","setListItem","setPaginationItem","messageCount","headerElement","Function","CourierInboxMenuButton","_container","_triggerButton","CourierInboxPopupMenu","_popup","SAFE_SELECTORS","some","node","sel","_inbox","closePopup","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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"}