@trycourier/courier-ui-inbox 1.0.6-beta → 1.0.7-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/components/courier-inbox-header-title.d.ts +2 -1
- package/dist/components/courier-inbox-list-item-menu.d.ts +4 -3
- package/dist/components/courier-inbox-list-item.d.ts +2 -1
- package/dist/components/courier-inbox-list.d.ts +2 -1
- package/dist/components/courier-inbox-option-menu-item.d.ts +2 -1
- package/dist/components/courier-inbox-option-menu.d.ts +2 -1
- package/dist/components/courier-inbox-pagination-list-item.d.ts +2 -1
- package/dist/components/{courier-inbox-menu.d.ts → courier-inbox-popup-menu.d.ts} +2 -1
- package/dist/components/courier-inbox-skeleton-list-item.d.ts +2 -1
- package/dist/components/courier-inbox.d.ts +2 -1
- package/dist/components/courier-unread-count-badge.d.ts +2 -1
- package/dist/datastore/__tests__/datastore.test.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +51 -86
- package/dist/index.mjs.map +1 -1
- package/dist/jest.setup.d.ts +0 -0
- package/package.json +7 -4
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-menu.ts","../src/datastore/datatore-events.ts","../src/utils/extensions.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\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);\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};\nclass CourierSystemThemeElement extends HTMLElement {\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 get currentSystemTheme() {\n return this._currentSystemTheme;\n }\n disconnectedCallback() {\n if (this._systemThemeCleanup) {\n this._systemThemeCleanup();\n }\n }\n onSystemThemeChange(_) {\n }\n}\nconst baseButtonStyles = {\n borderRadius: \"4px\",\n fontSize: \"14px\"\n};\nconst CourierButtonVariants = {\n primary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.primary,\n textColor: theme[mode].colors.secondary,\n fontWeight: \"500\",\n shadow: \"none\"\n }),\n secondary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.secondary,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: `1px solid ${theme[mode].colors.border}`,\n shadow: mode === \"light\" ? \"0px 1px 2px 0px rgba(0, 0, 0, 0.06)\" : \"0px 1px 2px 0px rgba(255, 255, 255, 0.1)\"\n }),\n tertiary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.border,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: \"none\",\n shadow: \"none\"\n })\n};\nclass CourierButton extends CourierSystemThemeElement {\n constructor(props) {\n super();\n // Components\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n const shadow = this.attachShadow({ mode: \"open\" });\n this._button = document.createElement(\"button\");\n this._button.setAttribute(\"part\", \"button\");\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(props);\n shadow.appendChild(this._style);\n shadow.appendChild(this._button);\n this.updateButton(props);\n this._button.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (props.onClick) {\n props.onClick();\n }\n });\n }\n getStyles(props) {\n const defaultTextColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.textColor;\n };\n const defaultBackgroundColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.backgroundColor;\n };\n const defaultBorder = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.border;\n };\n const defaultShadow = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.shadow;\n };\n const defaultBorderRadius = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.borderRadius;\n };\n const defaultFontSize = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontSize;\n };\n const defaultFontWeight = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontWeight;\n };\n return `\n :host {\n display: inline-block;\n }\n\n button {\n border: none;\n border-radius: ${props.borderRadius ?? defaultBorderRadius()};\n font-weight: ${props.fontWeight ?? defaultFontWeight()};\n font-family: ${props.fontFamily ?? \"inherit\"};\n font-size: ${props.fontSize ?? defaultFontSize()};\n padding: 6px 10px;\n cursor: pointer;\n width: 100%;\n height: 100%;\n background-color: ${props.backgroundColor ?? defaultBackgroundColor()};\n color: ${props.textColor ?? defaultTextColor()};\n border: ${props.border ?? defaultBorder()};\n box-shadow: ${props.shadow ?? defaultShadow()};\n touch-action: manipulation;\n }\n\n button:hover {\n ${props.hoverBackgroundColor ? `background-color: ${props.hoverBackgroundColor};` : \"filter: brightness(0.9);\"}\n }\n\n button:active {\n ${props.activeBackgroundColor ? `background-color: ${props.activeBackgroundColor};` : \"filter: brightness(0.8);\"}\n }\n\n button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `;\n }\n updateButton(props) {\n if (props.text) {\n this._button.textContent = props.text;\n }\n this._style.textContent = this.getStyles(props);\n }\n}\nif (!customElements.get(\"courier-button\")) {\n customElements.define(\"courier-button\", CourierButton);\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 HTMLElement {\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 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}\nif (!customElements.get(\"courier-icon\")) {\n customElements.define(\"courier-icon\", CourierIcon);\n}\nclass CourierLink extends HTMLElement {\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 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]);\nif (!customElements.get(\"courier-link\")) {\n customElements.define(\"courier-link\", CourierLink);\n}\nclass CourierElement extends CourierSystemThemeElement {\n constructor() {\n super();\n __publicField(this, \"shadow\");\n this.shadow = this.attachShadow({ mode: \"open\" });\n }\n // Build the element with a factory function\n build(newElement) {\n if (newElement === null) {\n this.shadow.replaceChildren();\n return;\n }\n const element = newElement ?? this.defaultElement();\n this.shadow.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 CourierElement {\n constructor(props) {\n super();\n // Props\n __publicField(this, \"_props\");\n // Components\n __publicField(this, \"_title\");\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n // Callbacks\n __publicField(this, \"_buttonClickCallback\", null);\n this._props = props;\n }\n defaultElement() {\n var _a, _b;\n const container = document.createElement(\"div\");\n this._title = document.createElement(\"h2\");\n if ((_a = this._props.title) == null ? void 0 : _a.text) {\n this._title.textContent = this._props.title.text;\n }\n this._button = new CourierButton(this._props.button ?? CourierButtonVariants.secondary(this.currentSystemTheme));\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(this._props);\n container.className = \"container\";\n container.appendChild(this._style);\n container.appendChild(this._title);\n container.appendChild(this._button);\n this.shadow.appendChild(container);\n (_b = this._button) == null ? void 0 : _b.addEventListener(\"click\", () => {\n if (this._buttonClickCallback) {\n this._buttonClickCallback();\n }\n });\n return container;\n }\n onSystemThemeChange(_) {\n this.updateStyles(this._props);\n }\n getStyles(props) {\n var _a, _b, _c, _d;\n return `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n }\n\n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n text-align: center;\n padding: 24px;\n }\n\n .container h2 {\n margin: 0;\n color: ${((_a = props.title) == null ? void 0 : _a.textColor) ?? \"red\"};\n font-size: ${((_b = props.title) == null ? void 0 : _b.fontSize) ?? \"16px\"};\n font-weight: ${((_c = props.title) == null ? void 0 : _c.fontWeight) ?? \"500\"};\n font-family: ${((_d = props.title) == null ? void 0 : _d.fontFamily) ?? \"inherit\"};\n }\n `;\n }\n updateStyles(props) {\n this._props = props;\n if (this._style) {\n this._style.textContent = this.getStyles(props);\n }\n if (this._button) {\n this._button.updateButton(props.button);\n }\n }\n setButtonClickCallback(callback) {\n this._buttonClickCallback = callback;\n }\n}\nif (!customElements.get(\"courier-info-state\")) {\n customElements.define(\"courier-info-state\", CourierInfoState);\n}\nclass CourierIconButton extends HTMLElement {\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 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}\nif (!customElements.get(\"courier-icon-button\")) {\n customElements.define(\"courier-icon-button\", CourierIconButton);\n}\nconst components = [\n { name: \"courier-button\", class: CourierButton },\n { name: \"courier-icon\", class: CourierIcon },\n { name: \"courier-link\", class: CourierLink },\n { name: \"courier-info-state\", class: CourierInfoState },\n { name: \"courier-icon-button\", class: CourierIconButton }\n];\ncomponents.forEach(({ name, class: componentClass }) => {\n if (!customElements.get(name)) {\n customElements.define(name, componentClass);\n }\n});\nexport {\n CourierButton,\n CourierButtonVariants,\n CourierColors,\n CourierElement,\n CourierIcon,\n CourierIconButton,\n CourierIconSVGs,\n CourierInfoState,\n CourierLink,\n CourierSystemThemeElement,\n addSystemThemeModeListener,\n getSystemThemeMode,\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 {\n return {\n ...dataSet,\n messages: dataSet.messages.map(message => copyMessage(message)),\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 < 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 { CourierIconButton } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxIcon, CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport type CourierListItemActionMenuOption = {\n id: string;\n icon: CourierInboxIcon;\n onClick: () => void;\n};\n\nexport class CourierListItemActionMenu extends HTMLElement {\n\n // State\n private _theme: CourierInboxTheme;\n private _options: CourierListItemActionMenuOption[] = [];\n\n // Components\n private _style: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n const shadow = this.attachShadow({ mode: \"open\" });\n\n // Style\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles();\n shadow.appendChild(this._style);\n\n // Menu container\n const menu = document.createElement(\"ul\");\n menu.className = \"menu\";\n shadow.appendChild(menu);\n\n }\n\n private getStyles(): string {\n\n const menu = this._theme.inbox?.list?.item?.menu;\n\n return `\n :host {\n display: block;\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 :host(.visible) {\n opacity: 1;\n pointer-events: auto;\n }\n\n ul.menu {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n }\n\n 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: CourierListItemActionMenuOption[]) {\n this._options = options;\n this.renderMenu();\n }\n\n private renderMenu() {\n // Clear existing menu items\n const menu = this.shadowRoot?.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.classList.add('visible');\n }\n\n hide() {\n this.classList.remove('visible');\n }\n}\n\nif (!customElements.get(\"courier-list-item-menu\")) {\n customElements.define(\"courier-list-item-menu\", CourierListItemActionMenu);\n}","import { Courier, InboxMessage, MessageEvent } 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 fetchDataSet(props: { feedType: CourierInboxFeedType, canUseCache: boolean }): Promise<InboxDataSet> {\n\n // Return existing dataset if available\n if (props.canUseCache) {\n switch (props.feedType) {\n case 'inbox':\n if (this._inboxDataSet) {\n return this._inboxDataSet;\n }\n break;\n case 'archive':\n if (this._archiveDataSet) {\n return this._archiveDataSet;\n }\n break;\n }\n }\n\n // Otherwise fetch new dataset\n const response = props.feedType === 'inbox'\n ? await Courier.shared.client?.inbox.getMessages()\n : await Courier.shared.client?.inbox.getArchivedMessages();\n\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 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?: { feedType: CourierInboxFeedType, canUseCache: boolean }) {\n\n try {\n\n // If the user is not signed in, return early\n if (!Courier.shared.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 ?? { feedType: 'inbox', canUseCache: true };\n\n // Fetch and update the data set and unread count in parallel\n const [dataSet, unreadCount] = await Promise.all([\n this.fetchDataSet(properties),\n this.fetchUnreadCount(properties)\n ]);\n\n switch (properties.feedType) {\n case 'inbox':\n this._inboxDataSet = dataSet;\n break;\n case 'archive':\n this._archiveDataSet = dataSet;\n break;\n }\n\n // Update the unread count\n this._unreadCount = unreadCount;\n\n // Notify the listeners\n this._dataStoreListeners.forEach(listener => {\n listener.events.onDataSetChange?.(dataSet, properties.feedType);\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 /** Listen for inbox and archive dataset updates. */\n public async listenForUpdates() {\n try {\n // Ensure both datasets are loaded since we may receive updates for messages in either.\n await this.ensureDataSetsLoaded();\n\n // Connect to the socket\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 /** Fetch either/both datasets if they aren't already loaded. */\n private async ensureDataSetsLoaded() {\n let dataSetPromises: Promise<void>[] = [];\n\n if (!this._inboxDataSet) {\n dataSetPromises.push(this.load({ feedType: 'inbox', canUseCache: true }));\n }\n\n if (!this._archiveDataSet) {\n dataSetPromises.push(this.load({ feedType: 'archive', canUseCache: true }));\n }\n\n await Promise.all(dataSetPromises);\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 Courier.shared.client?.options.logger?.info('CourierInbox socket connectionId:', Courier.shared.client?.options.connectionId);\n\n // If the socket is already connected, return early\n if (socket.isConnected) {\n Courier.shared.client?.options.logger?.info('CourierInbox socket already connected. Socket will not attempt reconnection.');\n return;\n }\n\n // Handle new messages\n socket.receivedMessage = (message: InboxMessage) => {\n this.addMessage(message, 0, 'inbox');\n };\n\n // Handle message events\n socket.receivedMessageEvent = (event: MessageEvent) => {\n\n let message: InboxMessage | undefined;\n\n // Get the original message if possible\n if (event.messageId) {\n message = this.getMessage({ messageId: event.messageId });\n }\n\n switch (event.event) {\n case 'mark-all-read':\n this.readAllMessages({ canCallApi: false });\n break;\n case 'read':\n if (message) {\n this.readMessage({ message, canCallApi: false });\n }\n break;\n case 'unread':\n if (message) {\n this.unreadMessage({ message, canCallApi: false });\n }\n break;\n case 'opened':\n if (message) {\n this.openMessage({ message, canCallApi: false });\n }\n break;\n case 'archive':\n if (message) {\n this.archiveMessage({ message, canCallApi: false });\n }\n break;\n case 'archive-read':\n this.archiveReadMessages({ canCallApi: false });\n break;\n case 'click':\n if (message) {\n this.clickMessage({ message, canCallApi: false });\n }\n break;\n case 'unarchive':\n if (message) {\n this.unarchiveMessage({ message, canCallApi: false });\n }\n break;\n case 'unopened':\n break;\n }\n };\n\n // Connect and subscribe to socket\n await socket.connect();\n await socket.sendSubscribe();\n socket.keepAlive();\n Courier.shared.client?.options.logger?.info('CourierInbox socket connected');\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 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 listener.events.onDataSetChange?.(inbox, 'inbox');\n listener.events.onDataSetChange?.(archive, 'archive');\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 { Courier, InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierButton, CourierIcon } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { getMessageTime } from \"../utils/utils\";\nimport { CourierListItemActionMenu, CourierListItemActionMenuOption } from \"./courier-inbox-list-item-menu\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\n\nexport class CourierListItem extends HTMLElement {\n // State\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\n\n // Elements\n private _titleElement: HTMLParagraphElement;\n private _subtitleElement: HTMLParagraphElement;\n private _timeElement: HTMLParagraphElement;\n private _style: HTMLStyleElement;\n private _menu: CourierListItemActionMenu;\n private _unreadIndicator: HTMLDivElement;\n private _actionsContainer: HTMLDivElement;\n\n // Touch gestures\n private _longPressTimeout: number | null = null;\n private _isLongPress: boolean = false;\n\n // Callbacks\n private onItemClick: ((message: InboxMessage) => void) | null = null;\n private onItemLongPress: ((message: InboxMessage) => void) | null = null;\n private onItemActionClick: ((message: InboxMessage, action: InboxAction) => void) | null = null;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n this._isMobile = 'ontouchstart' in window;\n const shadow = this.attachShadow({ mode: 'open' });\n\n const contentContainer = document.createElement('div');\n contentContainer.className = 'content-container';\n\n // Title\n this._titleElement = document.createElement('p');\n this._titleElement.setAttribute('part', 'title');\n\n // Subtitle\n this._subtitleElement = document.createElement('p');\n this._subtitleElement.setAttribute('part', '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.setAttribute('part', 'time');\n\n // Unread indicator\n this._unreadIndicator = document.createElement('div');\n this._unreadIndicator.className = 'unread-indicator';\n\n // Style element\n this._style = document.createElement('style');\n this._refreshStyles();\n\n // Action menu\n this._menu = new CourierListItemActionMenu(this._theme);\n this._menu.setOptions(this._getMenuOptions());\n\n // Append elements into shadow‑DOM\n shadow.append(this._style, 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.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 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(): CourierListItemActionMenuOption[] {\n const menuTheme = this._theme.inbox?.list?.item?.menu?.item;\n let options: CourierListItemActionMenuOption[] = [];\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) {\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) {\n this._menu.hide();\n this._menu.style.display = 'none';\n this._timeElement.style.opacity = '1';\n }\n }\n\n private _getStyles(): string {\n const listItem = this._theme.inbox?.list?.item;\n\n return `\n :host {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n border-bottom: ${listItem?.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: ${listItem?.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 :host(:hover) {\n background-color: ${listItem?.hoverBackgroundColor ?? 'red'};\n }\n }\n :host(:active) {\n background-color: ${listItem?.activeBackgroundColor ?? 'red'};\n }\n\n /* ───────────────────────── Menu hover / active ────────────────── */\n @media (hover: hover) {\n :host(:hover):has(courier-list-item-menu:hover, courier-list-item-menu *:hover, courier-button:hover, courier-button *:hover) {\n background-color: ${listItem?.backgroundColor ?? 'transparent'};\n }\n }\n :host(:active):has(courier-list-item-menu:active, courier-list-item-menu *:active, courier-button:active, courier-button *:active) {\n background-color: ${listItem?.backgroundColor ?? 'transparent'};\n }\n\n :host(:last-child) {\n border-bottom: none;\n }\n\n .unread-indicator {\n position: absolute;\n top: 28px;\n left: 6px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: ${listItem?.unreadIndicatorColor ?? 'red'};\n display: none;\n }\n\n :host(.unread) .unread-indicator {\n display: block;\n }\n\n .content-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin-right: 12px;\n }\n\n 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 p[part='title'] {\n font-family: ${listItem?.title?.family ?? 'inherit'};\n font-size: ${listItem?.title?.size ?? '14px'};\n color: ${listItem?.title?.color ?? 'red'};\n margin-bottom: 4px;\n }\n\n p[part='subtitle'] {\n font-family: ${listItem?.subtitle?.family ?? 'inherit'};\n font-size: ${listItem?.subtitle?.size ?? '14px'};\n color: ${listItem?.subtitle?.color ?? 'red'};\n }\n\n p[part='time'] {\n font-family: ${listItem?.time?.family ?? 'inherit'};\n font-size: ${listItem?.time?.size ?? '14px'};\n color: ${listItem?.time?.color ?? 'red'};\n text-align: right;\n white-space: nowrap;\n }\n\n courier-list-item-menu {\n z-index: 1;\n position: absolute;\n top: 8px;\n right: 8px;\n display: none; /* becomes block while visible */\n }\n\n .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 _refreshStyles(): void {\n this._style.textContent = this._getStyles();\n }\n\n // Lifecycle hooks\n connectedCallback(): void {\n const messageAttr = this.getAttribute('message');\n const feedTypeAttr = this.getAttribute('feed-type');\n\n if (feedTypeAttr) {\n this._feedType = feedTypeAttr as CourierInboxFeedType;\n }\n\n if (messageAttr) {\n try {\n this._message = JSON.parse(messageAttr) as InboxMessage;\n this._updateContent();\n } catch (err) {\n Courier.shared.client?.options.logger?.error('CourierListItem – failed to parse message:', err);\n }\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 if (!this._message) {\n this._titleElement.textContent = '';\n this._subtitleElement.textContent = '';\n return;\n }\n\n // Unread marker\n this.classList.toggle('unread', !this._message.read && this._feedType !== 'archive');\n\n this._titleElement.textContent = this._message.title || 'Untitled Message';\n this._subtitleElement.textContent = this._message.preview || this._message.body || '';\n this._timeElement.textContent = getMessageTime(this._message);\n\n // Update menu icons (e.g. read/unread)\n this._menu.setOptions(this._getMenuOptions());\n\n // Update actions container\n const hasActions = this._message?.actions && this._message.actions.length > 0;\n this._actionsContainer.style.display = hasActions ? 'flex' : 'none';\n\n const actionsTheme = this._theme.inbox?.list?.item?.actions;\n\n // Add the actions to the actions container\n this._message?.actions?.forEach(action => {\n\n // Create the action element\n const actionButton = new CourierButton({\n text: action.content,\n variant: 'secondary',\n backgroundColor: actionsTheme?.backgroundColor,\n hoverBackgroundColor: actionsTheme?.hoverBackgroundColor,\n activeBackgroundColor: actionsTheme?.activeBackgroundColor,\n border: actionsTheme?.border,\n borderRadius: actionsTheme?.borderRadius,\n shadow: actionsTheme?.shadow,\n fontFamily: actionsTheme?.font?.family,\n fontSize: actionsTheme?.font?.size,\n fontWeight: actionsTheme?.font?.weight,\n textColor: actionsTheme?.font?.color,\n onClick: () => {\n if (this._message && this.onItemActionClick) {\n this.onItemActionClick(this._message, action);\n }\n },\n });\n\n // Add the action element to the actions container\n this._actionsContainer.appendChild(actionButton);\n });\n }\n}\n\nif (!customElements.get('courier-list-item')) {\n customElements.define('courier-list-item', CourierListItem);\n}","import { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonListItem extends HTMLElement {\n\n // Shadow root\n private _shadow: ShadowRoot;\n\n constructor(theme: CourierInboxTheme, opacity: number) {\n super();\n this._shadow = this.attachShadow({ mode: 'open' });\n\n // Create style element for gap\n const style = document.createElement('style');\n style.textContent = this.getStyles(opacity);\n this._shadow.appendChild(style);\n\n // Create skeleton items using CourierSkeletonAnimatedRow\n const firstRow = new CourierSkeletonAnimatedRow(theme, 35);\n const secondRow = new CourierSkeletonAnimatedRow(theme, 100);\n const thirdRow = new CourierSkeletonAnimatedRow(theme, 82);\n\n this._shadow.appendChild(firstRow);\n this._shadow.appendChild(secondRow);\n this._shadow.appendChild(thirdRow);\n\n }\n\n private getStyles(opacity: number): string {\n return `\n :host {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n width: 100%;\n box-sizing: border-box;\n opacity: ${opacity};\n }\n `;\n }\n}\n\n// Register the custom element\nif (!customElements.get('courier-inbox-skeleton-list-item')) {\n customElements.define('courier-inbox-skeleton-list-item', CourierInboxSkeletonListItem);\n}\n\nclass CourierSkeletonAnimatedRow extends HTMLElement {\n\n private _shadow: ShadowRoot;\n\n constructor(theme: CourierInboxTheme, widthPercent: number) {\n super();\n this._shadow = this.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = this.getStyles(theme, widthPercent);\n this._shadow.appendChild(style);\n\n const skeletonItem = document.createElement('div');\n skeletonItem.className = 'skeleton-item';\n this._shadow.appendChild(skeletonItem);\n }\n\n private getStyles(theme: CourierInboxTheme, widthPercent: number): 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 :host {\n display: flex;\n height: 100%;\n width: ${widthPercent}%;\n align-items: flex-start;\n justify-content: flex-start;\n }\n\n .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: shimmer ${theme.inbox?.loading?.animation?.duration ?? '2s'} ease-in-out infinite;\n border-radius: ${theme.inbox?.loading?.animation?.barBorderRadius ?? '14px'};\n }\n\n @keyframes shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n `;\n }\n}\n\nif (!customElements.get('courier-skeleton-animated-row')) {\n customElements.define('courier-skeleton-animated-row', CourierSkeletonAnimatedRow);\n}\n","import { CourierElement } 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 CourierElement {\n\n private _theme: CourierInboxTheme;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n defaultElement(): HTMLElement {\n const list = document.createElement('div');\n list.className = 'list';\n\n // Create style element\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n list.appendChild(style);\n\n // Create skeleton items\n for (let i = 0; i < 3; i++) {\n const skeletonItem = new CourierInboxSkeletonListItem(this._theme, 1 / (i + 1)); // TODO: Make this a prop\n list.appendChild(skeletonItem);\n }\n\n this.shadow.appendChild(list);\n return list;\n }\n\n private getStyles(): string {\n return `\n :host {\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 .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n overflow: hidden;\n }\n\n .list > * {\n border-bottom: ${this._theme.inbox?.loading?.divider ?? '1px solid red'};\n }\n\n .list > *:last-child {\n border-bottom: none;\n }\n `;\n }\n}\n\n// Register the custom element\nif (!customElements.get('courier-inbox-skeleton-list')) {\n customElements.define('courier-inbox-skeleton-list', CourierInboxSkeletonList);\n}","import { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { CourierInboxSkeletonList } from \"./courier-inbox-skeleton-list\";\n\nexport class CourierInboxPaginationListItem extends HTMLElement {\n\n // Components\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.onPaginationTrigger = props.onPaginationTrigger;\n this.customItem = props.customItem;\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n // Add styles to remove padding/margin and set box-sizing\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n shadow.appendChild(style);\n\n if (this.customItem) {\n shadow.appendChild(this.customItem);\n } else {\n const container = document.createElement('div');\n container.className = 'skeleton-container';\n\n this.skeletonLoadingList = new CourierInboxSkeletonList(props.theme);\n this.skeletonLoadingList.build(undefined);\n container.appendChild(this.skeletonLoadingList);\n\n shadow.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 private getStyles(): string {\n return `\n :host {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n }\n\n .skeleton-container {\n height: 150%;\n }\n `;\n }\n\n disconnectedCallback() {\n this.observer.disconnect();\n }\n\n}\n\nif (!customElements.get('courier-inbox-pagination-list-item')) {\n customElements.define('courier-inbox-pagination-list-item', CourierInboxPaginationListItem);\n}\n","import { InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierColors, CourierInfoState } from \"@trycourier/courier-ui-core\";\nimport { CourierListItem } 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\";\n\nexport class CourierInboxList extends HTMLElement {\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 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 theme subscription\n this._themeSubscription = props.themeManager.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme();\n });\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 const shadow = this.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n shadow.appendChild(style);\n\n }\n\n private getStyles(): string {\n\n const list = this._themeSubscription.manager.getTheme().inbox?.list;\n\n return `\n :host {\n flex: 1;\n width: 100%;\n background-color: ${list?.backgroundColor ?? CourierColors.white[500]};\n }\n\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n height: 100%;\n }\n `;\n }\n\n private reset(): void {\n // Remove any existing elements from the shadow root\n while (this.shadowRoot?.firstChild) {\n this.shadowRoot.removeChild(this.shadowRoot.firstChild);\n }\n\n // Re-add the style element\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n this.shadowRoot?.appendChild(style);\n }\n\n public setDataSet(dataSet: InboxDataSet): void {\n this._messages = [...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addPage(dataSet: InboxDataSet): void {\n this._messages = [...this._messages, ...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addMessage(message: InboxMessage, index = 0): void {\n this._messages.splice(index, 0, message);\n this.render();\n }\n\n public removeMessage(index = 0): void {\n this._messages.splice(index, 1);\n this.render();\n }\n\n public updateMessage(message: InboxMessage, index = 0): void {\n this._messages[index] = message;\n this.render();\n }\n\n public setFeedType(feedType: CourierInboxFeedType): void {\n this._feedType = feedType;\n this._error = null;\n this._isLoading = true;\n this.render();\n }\n\n public setLoading(isLoading: boolean): void {\n this._error = null;\n this._isLoading = isLoading;\n this.render();\n }\n\n public setError(error: Error | null): void {\n this._error = error;\n this._isLoading = false;\n this._messages = [];\n this.render();\n }\n\n public setErrorNoClient(): void {\n this.setError(new Error('No user signed in'));\n }\n\n private handleRetry(): void {\n this._onRefresh();\n }\n\n private handleRefresh(): void {\n this._onRefresh();\n }\n\n private render(): void {\n this.reset();\n\n const theme = this._themeSubscription.manager.getTheme();\n\n // Error state\n if (this._error) {\n const error = theme.inbox?.error;\n const errorElement = new CourierInfoState({\n title: {\n text: error?.title?.text ?? this._error.message,\n textColor: error?.title?.font?.color,\n fontFamily: error?.title?.font?.family,\n fontSize: error?.title?.font?.size,\n fontWeight: error?.title?.font?.weight\n },\n button: {\n text: error?.button?.text,\n backgroundColor: error?.button?.backgroundColor,\n hoverBackgroundColor: error?.button?.hoverBackgroundColor,\n activeBackgroundColor: error?.button?.activeBackgroundColor,\n textColor: error?.button?.font?.color,\n fontFamily: error?.button?.font?.family,\n fontSize: error?.button?.font?.size,\n fontWeight: error?.button?.font?.weight,\n shadow: error?.button?.shadow,\n border: error?.button?.border,\n borderRadius: error?.button?.borderRadius\n }\n });\n errorElement.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n errorElement.setButtonClickCallback(() => this.handleRetry());\n this.shadowRoot?.appendChild(errorElement);\n return;\n }\n\n // Loading state\n if (this._isLoading) {\n const loadingElement = new CourierInboxSkeletonList(theme);\n loadingElement.build(this._loadingStateFactory?.({ feedType: this._feedType }));\n this.shadowRoot?.appendChild(loadingElement);\n return;\n }\n\n // Empty state\n if (this._messages.length === 0) {\n const empty = theme.inbox?.empty;\n const emptyElement = new CourierInfoState({\n title: {\n text: empty?.title?.text ?? `No ${this._feedType} messages yet`,\n textColor: empty?.title?.font?.color,\n fontFamily: empty?.title?.font?.family,\n fontSize: empty?.title?.font?.size,\n fontWeight: empty?.title?.font?.weight\n },\n button: {\n text: empty?.button?.text,\n backgroundColor: empty?.button?.backgroundColor,\n hoverBackgroundColor: empty?.button?.hoverBackgroundColor,\n activeBackgroundColor: empty?.button?.activeBackgroundColor,\n textColor: empty?.button?.font?.color,\n fontFamily: empty?.button?.font?.family,\n fontSize: empty?.button?.font?.size,\n fontWeight: empty?.button?.font?.weight,\n shadow: empty?.button?.shadow,\n border: empty?.button?.border,\n borderRadius: empty?.button?.borderRadius\n }\n });\n emptyElement.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n emptyElement.setButtonClickCallback(() => this.handleRefresh());\n this.shadowRoot?.appendChild(emptyElement);\n return;\n }\n\n // Create list before adding messages\n const list = document.createElement('ul');\n this.shadowRoot?.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 CourierListItem(theme);\n listItem.setMessage(message, this._feedType);\n listItem.setOnItemClick((message) => this._onMessageClick?.(message, index));\n listItem.setOnItemActionClick((message, action) => this._onMessageActionClick?.(message, action, index));\n listItem.setOnItemLongPress((message) => this._onMessageLongPress?.(message, index));\n list.appendChild(listItem);\n });\n\n // Add pagination item if can paginate\n if (this._canPaginate) {\n const paginationItem = new CourierInboxPaginationListItem({\n theme: 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 public refreshTheme(): void {\n this.render();\n }\n\n // Disconnect the theme subscription\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nif (!customElements.get('courier-inbox-list')) {\n customElements.define('courier-inbox-list', CourierInboxList);\n}\n","import { CourierIcon, CourierIconSVGs } 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 HTMLElement {\n\n // State\n private _option: CourierInboxMenuOption;\n private _isSelected?: boolean;\n\n // Components\n private _content: HTMLDivElement;\n private _itemIcon: CourierIcon;\n private _title: HTMLParagraphElement;\n private _selectionIcon: CourierIcon;\n private _style: HTMLStyleElement;\n\n // Theme\n private _themeManager: CourierInboxThemeManager;\n\n constructor(props: { option: CourierInboxMenuOption, selectable: boolean, isSelected: boolean, themeManager: CourierInboxThemeManager }) {\n super();\n\n this._option = props.option;\n this._isSelected = props.isSelected;\n this._themeManager = props.themeManager;\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n this._style = document.createElement('style');\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 (props.selectable) {\n this._content.appendChild(this._selectionIcon);\n }\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._content);\n\n this._selectionIcon.style.display = this._isSelected ? 'block' : 'none';\n\n this.refreshTheme();\n\n }\n\n private getStyles(): string {\n\n const theme = this._themeManager.getTheme();\n\n return `\n :host {\n display: flex;\n flex-direction: row;\n padding: 6px 12px;\n cursor: pointer;\n }\n\n :host(:hover) {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.hoverBackgroundColor ?? 'red'};\n }\n\n :host(:active) {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.activeBackgroundColor ?? 'red'};\n }\n\n .menu-item {\n display: flex;\n align-items: center;\n width: 100%;\n gap: 12px;\n }\n\n .spacer {\n flex: 1;\n }\n\n 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 .check-icon {\n display: none;\n }\n `;\n }\n\n public refreshTheme() {\n\n // Update styles\n this._style.textContent = this.getStyles();\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 this._title.textContent = this._option.text ?? 'Missing Text';\n this._itemIcon.updateColor(this._option.icon?.color ?? 'red');\n this._itemIcon.updateSVG(this._option.icon?.svg ?? CourierIconSVGs.inbox);\n\n }\n\n}\n\nif (!customElements.get('courier-inbox-filter-menu-item')) {\n customElements.define('courier-inbox-filter-menu-item', CourierInboxOptionMenuItem);\n}","import { CourierIconButton, CourierIconSVGs } 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 { CourierInboxIcon } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxMenuOptionType = 'filters' | 'actions';\n\nexport type CourierInboxMenuOption = {\n id: CourierInboxHeaderMenuItemId;\n text: string;\n icon: CourierInboxIcon;\n selectionIcon?: CourierInboxIcon | null;\n onClick: (option: CourierInboxMenuOption) => void;\n};\n\nexport class CourierInboxOptionMenu extends HTMLElement {\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 const shadow = this.attachShadow({ mode: 'open' });\n\n this._menuButton = new CourierIconButton(type === 'filters' ? CourierIconSVGs.filter : CourierIconSVGs.overflow);\n this._menu = document.createElement('div');\n this._menu.className = `menu ${type}`;\n\n this._style = document.createElement('style');\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._menuButton);\n shadow.appendChild(this._menu);\n\n this._menuButton.addEventListener('click', this.toggleMenu.bind(this));\n document.addEventListener('click', this.handleOutsideClick.bind(this));\n\n // Handle the theme change\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Set the theme\n this.refreshTheme();\n }\n\n private getStyles(): string {\n const theme = this._themeSubscription.manager.getTheme();\n\n return `\n :host {\n position: relative;\n display: inline-block;\n }\n\n .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 courier-inbox-filter-menu-item {\n border-bottom: ${theme.inbox?.header?.menus?.popup?.list?.divider ?? 'none'};\n }\n\n courier-inbox-filter-menu-item:last-child {\n border-bottom: none;\n }\n `;\n }\n\n private refreshTheme() {\n // Update styles\n this._style.textContent = this.getStyles();\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 this._menu.innerHTML = '';\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 this._menu.style.display = isOpening ? 'block' : 'none';\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 this._menu.style.display = 'none';\n }\n\n public selectOption(option: CourierInboxMenuOption) {\n this._selectedIndex = this._options.findIndex(o => o.id === option.id);\n this.refreshMenuItems();\n }\n\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n}\n\nif (!customElements.get('courier-inbox-option-menu')) {\n customElements.define('courier-inbox-option-menu', CourierInboxOptionMenu);\n}\n","import { 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 HTMLElement {\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 constructor(props: { themeBus: CourierInboxThemeManager, location: CourierUnreadCountLocation }) {\n super();\n\n this._location = props.location;\n\n // Initialize the theme subscription\n this._themeSubscription = props.themeBus.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme(this._location);\n });\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n // Create badge element\n this._badge = document.createElement('span');\n this._badge.className = 'unread-badge';\n\n // Add styles\n this._style = document.createElement('style');\n this._style.textContent = this.getStyles(this._location);\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._badge);\n }\n\n private getStyles(location: CourierUnreadCountLocation): string {\n\n const theme = this._themeSubscription.manager.getTheme();\n\n // Get the indicator styles\n const indicator = location === 'button'\n ? theme.popup?.button?.unreadIndicator\n : theme.inbox?.header?.filters?.unreadIndicator;\n\n const backgroundColor = indicator?.backgroundColor;\n const borderRadius = indicator?.borderRadius;\n const color = indicator?.font?.color;\n const fontSize = indicator?.font?.size;\n\n // Return the styles\n return `\n :host {\n display: inline-block;\n }\n\n .unread-badge {\n background-color: ${backgroundColor};\n color: ${color};\n border-radius: ${borderRadius};\n padding: 4px 8px;\n font-size: ${fontSize};\n text-align: center;\n display: none;\n pointer-events: none;\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 this._style.textContent = this.getStyles(this._location);\n if (this._count > 0) {\n this._badge.textContent = this._count.toString();\n this._badge.style.display = 'block';\n } else {\n this._badge.style.display = 'none';\n }\n }\n\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nif (!customElements.get('courier-unread-count-badge')) {\n customElements.define('courier-unread-count-badge', CourierUnreadCountBadge);\n}\n","import { CourierIcon, CourierIconSVGs } 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\";\n\nexport class CourierInboxHeaderTitle extends HTMLElement {\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _option: CourierInboxMenuOption;\n private _feedType?: CourierInboxFeedType;\n\n // Components\n private _titleElement: HTMLHeadingElement;\n private _iconElement: CourierIcon;\n private _unreadBadge: CourierUnreadCountBadge;\n private _container: HTMLDivElement;\n private _style: HTMLStyleElement;\n\n constructor(themeManager: CourierInboxThemeManager, option: CourierInboxMenuOption) {\n super();\n\n this._option = option;\n const shadow = this.attachShadow({ mode: 'open' });\n\n this._style = document.createElement('style');\n\n this._container = document.createElement('div');\n this._container.className = 'title-section';\n\n this._iconElement = new CourierIcon(undefined, this._option.icon.svg);\n\n this._titleElement = document.createElement('h2');\n this._unreadBadge = new CourierUnreadCountBadge({\n themeBus: themeManager,\n location: 'header'\n });\n\n this._container.appendChild(this._iconElement);\n this._container.appendChild(this._titleElement);\n this._container.appendChild(this._unreadBadge);\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._container);\n\n // Subscribe to the theme bus\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme(this._feedType ?? 'inbox');\n });\n\n this.refreshTheme(this._feedType ?? 'inbox');\n\n }\n\n private getStyles(): string {\n\n const theme = this._themeSubscription.manager.getTheme();\n\n return `\n .title-section {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n }\n\n courier-icon {\n display: flex;\n align-items: center;\n }\n\n 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 courier-unread-count-badge {\n margin-left: 4px;\n }\n `;\n }\n\n private refreshTheme(feedType: CourierInboxFeedType) {\n this._feedType = feedType;\n this._style.textContent = this.getStyles();\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 this._titleElement.textContent = theme.inbox?.header?.filters?.inbox?.text ?? 'Inbox';\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 this._titleElement.textContent = theme.inbox?.header?.filters?.archive?.text ?? 'Archive';\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 // Disconnect the theme subscription\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nif (!customElements.get('courier-inbox-header-title')) {\n customElements.define('courier-inbox-header-title', CourierInboxHeaderTitle);\n}","import { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierIconSVGs, CourierElement } 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 { CourierColors } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\n\nexport type CourierInboxHeaderMenuItemId = CourierInboxFeedType | 'markAllRead' | 'archiveAll' | 'archiveRead';\n\nexport class CourierInboxHeader extends CourierElement {\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _feedType: CourierInboxFeedType = 'inbox';\n private _unreadCount: number = 0;\n\n // Menu options\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\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 // 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 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\n static get observedAttributes() {\n return ['icon', 'title', 'feed-type'];\n }\n\n private refreshTheme() {\n\n const theme = this._themeSubscription.manager.getTheme();\n\n // Update header styles\n const header = this.shadow?.querySelector('.courier-inbox-header') as HTMLElement;\n if (header) {\n header.style.backgroundColor = theme.inbox?.header?.backgroundColor ?? CourierColors.white[500];\n header.style.boxShadow = theme.inbox?.header?.shadow ?? `0px 1px 0px 0px ${CourierColors.gray[500]}`;\n }\n\n // Update menus\n this._filterMenu?.setOptions(this.getFilterOptions());\n this._actionMenu?.setOptions(this.getActionOptions());\n\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 this.refreshTitleSection();\n }\n\n private refreshTitleSection() {\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\n // This will put the header above the rest of the elements\n // This is needed incase someone wants to set shadow\n this._style = document.createElement('style');\n this._style.textContent = this.getStyles();\n this.shadow?.appendChild(this._style);\n\n this.refreshTheme();\n\n }\n\n defaultElement(): HTMLElement {\n\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 container = document.createElement('div');\n container.className = 'courier-inbox-header';\n container.appendChild(this._titleSection);\n container.appendChild(spacer);\n container.appendChild(actions);\n\n return container;\n }\n\n private getStyles(): string {\n return `\n :host {\n z-index: 100;\n }\n\n .courier-inbox-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 10px 10px 16px;\n background-color: ${CourierColors.white[500]};\n box-shadow: 0px 1px 0px 0px ${CourierColors.gray[500]};\n }\n\n .header-content {\n display: flex;\n align-items: center;\n flex: 1;\n }\n\n .spacer {\n flex: 1;\n }\n\n .actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n `;\n }\n\n // Disconnect the theme subscription\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n}\n\nif (!customElements.get('courier-inbox-header')) {\n customElements.define('courier-inbox-header', CourierInboxHeader);\n}\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 CourierInboxFont = {\n family?: string;\n weight?: string;\n size?: string;\n color?: string;\n}\n\nexport type CourierInboxIcon = {\n color?: string;\n svg?: string;\n}\n\nexport type CourierInboxFilterItem = {\n icon?: CourierInboxIcon;\n text?: string;\n}\n\nexport type CourierInboxUnreadIndicator = {\n font?: CourierInboxFont;\n backgroundColor?: string;\n borderRadius?: string;\n}\n\nexport type CourierInboxIconButton = {\n icon?: CourierInboxIcon;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n}\n\nexport type CourierInboxButton = {\n font?: CourierInboxFont;\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 CourierInboxMenuButton = CourierInboxIconButton & {\n unreadIndicator?: CourierInboxUnreadIndicator;\n}\n\nexport type CourierInboxPopup = {\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n list?: {\n font?: CourierInboxFont;\n selectionIcon?: CourierInboxIcon;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n divider?: string;\n };\n}\n\nexport type CourierInboxListItem = {\n unreadIndicatorColor?: string;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n title?: CourierInboxFont;\n subtitle?: CourierInboxFont;\n time?: CourierInboxFont;\n archiveIcon?: CourierInboxIcon;\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?: CourierInboxFont;\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?: CourierInboxIcon;\n unread?: CourierInboxIcon;\n archive?: CourierInboxIcon;\n unarchive?: CourierInboxIcon;\n };\n };\n}\n\nexport type CourierInboxSkeletonLoadingState = {\n animation?: {\n barColor?: string;\n barHeight?: string;\n barBorderRadius?: string;\n duration?: string;\n },\n divider?: string;\n}\n\nexport type CourierInboxInfoState = {\n title?: {\n font?: CourierInboxFont;\n text?: string;\n },\n button?: CourierInboxButton;\n}\n\nexport type CourierMenuItem = {\n icon?: CourierInboxIcon;\n text?: string;\n}\n\nexport type CourierFilterMenu = {\n button?: CourierInboxIconButton;\n inbox?: CourierMenuItem;\n archive?: CourierMenuItem;\n}\n\nexport type CourierActionMenu = {\n button?: CourierInboxIconButton;\n markAllRead?: CourierMenuItem;\n archiveAll?: CourierMenuItem;\n archiveRead?: CourierMenuItem;\n}\n\nexport type CourierInboxTheme = {\n popup?: {\n button?: CourierInboxMenuButton;\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?: CourierInboxFont;\n inbox?: CourierInboxFilterItem;\n archive?: CourierInboxFilterItem;\n unreadIndicator?: CourierInboxUnreadIndicator;\n }\n menus?: {\n popup?: CourierInboxPopup;\n filters?: CourierFilterMenu;\n actions?: CourierActionMenu;\n }\n }\n list?: {\n backgroundColor?: string;\n item?: CourierInboxListItem;\n },\n loading?: CourierInboxSkeletonLoadingState,\n empty?: CourierInboxInfoState,\n error?: CourierInboxInfoState\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.white[500],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[400]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\n// Deep merge the themes, only overwriting non-optional properties\nexport const mergeTheme = (mode: SystemThemeMode, theme: CourierInboxTheme): CourierInboxTheme => {\n const defaultTheme = mode === 'light' ? defaultLightTheme : defaultDarkTheme;\n return {\n popup: {\n button: {\n ...defaultTheme.popup?.button,\n ...theme.popup?.button,\n icon: {\n ...defaultTheme.popup?.button?.icon,\n ...theme.popup?.button?.icon\n },\n unreadIndicator: {\n ...defaultTheme.popup?.button?.unreadIndicator,\n ...theme.popup?.button?.unreadIndicator\n }\n },\n window: {\n ...defaultTheme.popup?.window,\n ...theme.popup?.window\n }\n },\n inbox: {\n header: {\n ...defaultTheme.inbox?.header,\n ...theme.inbox?.header,\n filters: {\n ...defaultTheme.inbox?.header?.filters,\n ...theme.inbox?.header?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.filters?.inbox,\n ...theme.inbox?.header?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.inbox?.icon,\n ...theme.inbox?.header?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.filters?.archive,\n ...theme.inbox?.header?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.archive?.icon,\n ...theme.inbox?.header?.filters?.archive?.icon\n }\n },\n unreadIndicator: {\n ...defaultTheme.inbox?.header?.filters?.unreadIndicator,\n ...theme.inbox?.header?.filters?.unreadIndicator\n }\n },\n menus: {\n ...defaultTheme.inbox?.header?.menus,\n ...theme.inbox?.header?.menus,\n popup: {\n ...defaultTheme.inbox?.header?.menus?.popup,\n ...theme.inbox?.header?.menus?.popup,\n list: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list,\n ...theme.inbox?.header?.menus?.popup?.list,\n font: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.font,\n ...theme.inbox?.header?.menus?.popup?.list?.font\n },\n selectionIcon: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.selectionIcon,\n ...theme.inbox?.header?.menus?.popup?.list?.selectionIcon\n }\n }\n },\n filters: {\n ...defaultTheme.inbox?.header?.menus?.filters,\n ...theme.inbox?.header?.menus?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox,\n ...theme.inbox?.header?.menus?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox?.icon,\n ...theme.inbox?.header?.menus?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive,\n ...theme.inbox?.header?.menus?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive?.icon,\n ...theme.inbox?.header?.menus?.filters?.archive?.icon\n }\n }\n },\n actions: {\n ...defaultTheme.inbox?.header?.menus?.actions,\n ...theme.inbox?.header?.menus?.actions,\n markAllRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead,\n ...theme.inbox?.header?.menus?.actions?.markAllRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.markAllRead?.icon\n }\n },\n archiveAll: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll,\n ...theme.inbox?.header?.menus?.actions?.archiveAll,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveAll?.icon\n }\n },\n archiveRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead,\n ...theme.inbox?.header?.menus?.actions?.archiveRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveRead?.icon\n }\n }\n }\n }\n },\n list: {\n ...defaultTheme.inbox?.list,\n ...theme.inbox?.list,\n item: {\n ...defaultTheme.inbox?.list?.item,\n ...theme.inbox?.list?.item,\n menu: {\n ...defaultTheme.inbox?.list?.item?.menu,\n ...theme.inbox?.list?.item?.menu,\n item: {\n ...defaultTheme.inbox?.list?.item?.menu?.item,\n ...theme.inbox?.list?.item?.menu?.item,\n read: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.read,\n ...theme.inbox?.list?.item?.menu?.item?.read\n },\n unread: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unread,\n ...theme.inbox?.list?.item?.menu?.item?.unread\n },\n archive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.archive,\n ...theme.inbox?.list?.item?.menu?.item?.archive\n },\n unarchive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unarchive,\n ...theme.inbox?.list?.item?.menu?.item?.unarchive\n }\n }\n }\n }\n },\n loading: {\n ...defaultTheme.inbox?.loading,\n ...theme.inbox?.loading,\n },\n empty: {\n ...defaultTheme.inbox?.empty,\n ...theme.inbox?.empty\n },\n error: {\n ...defaultTheme.inbox?.error,\n ...theme.inbox?.error\n }\n }\n };\n};\n","import { CourierComponentThemeMode, SystemThemeMode, addSystemThemeModeListener, getSystemThemeMode } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme, defaultDarkTheme, defaultLightTheme, mergeTheme } from \"./courier-inbox-theme\";\n\nexport interface CourierInboxThemeSubscription {\n manager: CourierInboxThemeManager;\n unsubscribe: () => void;\n}\n\nexport class CourierInboxThemeManager {\n\n // Event IDs\n private readonly THEME_CHANGE_EVENT: string = 'courier_inbox_theme_change';\n\n // State\n private _theme: CourierInboxTheme;\n private _lightTheme: CourierInboxTheme = defaultLightTheme;\n private _darkTheme: CourierInboxTheme = defaultDarkTheme;\n private _target: EventTarget;\n private _subscriptions: CourierInboxThemeSubscription[] = [];\n\n // System theme\n private _userMode: CourierComponentThemeMode;\n private _systemMode: SystemThemeMode;\n private _systemThemeCleanup: (() => void) | undefined;\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._lightTheme = theme;\n if (this._systemMode === 'light') {\n this.updateTheme();\n }\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._darkTheme = theme;\n if (this._systemMode === 'dark') {\n this.updateTheme();\n }\n }\n\n constructor(initialTheme: CourierInboxTheme) {\n this._theme = initialTheme;\n this._target = new EventTarget();\n this._userMode = 'system' as CourierComponentThemeMode;\n\n // Get the initial system theme\n this._systemMode = getSystemThemeMode();\n this.setLightTheme(defaultLightTheme);\n this.setDarkTheme(defaultDarkTheme);\n\n // Set up system theme listener\n this._systemThemeCleanup = addSystemThemeModeListener((mode: SystemThemeMode) => {\n this._systemMode = mode;\n this.updateTheme();\n });\n }\n\n /**\n * Get the current system theme\n */\n public get currentSystemTheme(): SystemThemeMode {\n return this._systemMode;\n }\n\n /**\n * Get the current theme\n */\n public getTheme() {\n return this._theme;\n }\n\n /**\n * Update the theme\n */\n private updateTheme() {\n\n // Use the user mode or fallback to the system mode\n const mode = this._userMode === 'system' ? this._systemMode : this._userMode;\n\n // Get the theme \n const theme = mode === 'light' ? this._lightTheme : this._darkTheme;\n\n // Merge the theme\n const mergedTheme = mergeTheme(mode, theme);\n\n // Set the theme\n this.setTheme(mergedTheme);\n }\n\n /**\n * Set the theme and notify all listeners\n */\n private setTheme(theme: CourierInboxTheme) {\n if (theme === this._theme) return;\n this._theme = theme;\n this._target.dispatchEvent(new CustomEvent(this.THEME_CHANGE_EVENT, {\n detail: { theme }\n }));\n }\n\n /**\n * Set the mode and notify all listeners\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._userMode = mode;\n this.updateTheme();\n }\n\n /**\n * Subscribe to theme changes\n * @param {Function} callback - Function to run when the theme changes\n * @returns {CourierInboxThemeSubscription} - Object with remove method to stop listening\n */\n subscribe(callback: (theme: CourierInboxTheme) => void): CourierInboxThemeSubscription {\n const controller = new AbortController();\n this._target.addEventListener(this.THEME_CHANGE_EVENT, ((e: Event) => {\n callback((e as CustomEvent<{ theme: CourierInboxTheme }>).detail.theme);\n }) as EventListener, { signal: controller.signal });\n\n const subscription: CourierInboxThemeSubscription = {\n manager: this,\n unsubscribe: () => {\n controller.abort();\n const index = this._subscriptions.indexOf(subscription);\n if (index > -1) {\n this._subscriptions.splice(index, 1);\n }\n }\n };\n\n this._subscriptions.push(subscription);\n return subscription;\n }\n\n /**\n * Clean up event listeners\n */\n public cleanup() {\n if (this._systemThemeCleanup) {\n this._systemThemeCleanup();\n }\n this._subscriptions.forEach(subscription => subscription.unsubscribe());\n this._subscriptions = [];\n }\n\n}","import { AuthenticationListener, Courier, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierInboxList } from \"./courier-inbox-list\";\nimport { CourierInboxHeader } from \"./courier-inbox-header\";\nimport { CourierComponentThemeMode, CourierIconSVGs } 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\";\n\nexport class CourierInbox extends HTMLElement {\n\n // State\n private _currentFeed: CourierInboxFeedType = 'inbox';\n\n // Theming\n private _themeManager: CourierInboxThemeManager;\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n // Components\n private _shadow: ShadowRoot;\n private _list: CourierInboxList;\n private _datastoreListener: CourierInboxDataStoreListener | undefined;\n private _authListener: AuthenticationListener | undefined;\n private _style: HTMLStyleElement;\n\n // Header\n private _header: CourierInboxHeader;\n private _headerFactory: ((props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) | undefined | null = undefined;\n\n // List\n private _onMessageClick?: (props: CourierInboxListItemFactoryProps) => void;\n private _onMessageActionClick?: (props: CourierInboxListItemActionFactoryProps) => void;\n private _onMessageLongPress?: (props: CourierInboxListItemFactoryProps) => void;\n\n // Default props\n private _defaultProps = {\n title: 'Inbox',\n icon: CourierIconSVGs.inbox,\n feedType: this._currentFeed,\n height: '768px'\n };\n\n static get observedAttributes() {\n return ['height', 'light-theme', 'dark-theme', 'mode', 'message-click', 'message-action-click', 'message-long-press'];\n }\n\n constructor(themeManager?: CourierInboxThemeManager) {\n super();\n\n // Attach the shadow DOM\n this._shadow = this.attachShadow({ mode: 'open' });\n\n // Theme\n this._themeManager = themeManager ?? new CourierInboxThemeManager(defaultLightTheme);\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._shadow.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._style = document.createElement('style');\n this.refreshTheme();\n\n this._shadow.appendChild(this._style);\n this._shadow.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 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 this.refresh();\n }\n\n }\n\n private refreshTheme() {\n this._style.textContent = this.getStyles();\n }\n\n private getStyles(): string {\n return `\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: ${this._defaultProps.height};\n }\n\n courier-inbox-header {\n flex-shrink: 0;\n }\n\n 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 feedType: this._currentFeed,\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\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: { feedType: CourierInboxFeedType, canUseCache: boolean }) {\n await CourierInboxDatastore.shared.load(props);\n await CourierInboxDatastore.shared.listenForUpdates();\n }\n\n public refresh() {\n this.load({\n feedType: this._currentFeed,\n canUseCache: false\n });\n }\n\n connectedCallback() {\n this.refresh();\n }\n\n disconnectedCallback() {\n this._themeManager.cleanup();\n this._datastoreListener?.remove();\n this._authListener?.remove();\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\n// Register the custom element\nif (!customElements.get('courier-inbox')) {\n customElements.define('courier-inbox', CourierInbox);\n}","import { CourierColors, CourierElement, CourierIconButton, CourierIconSVGs } 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 CourierElement {\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // Components\n private _container?: HTMLDivElement;\n private _triggerButton?: CourierIconButton;\n private _unreadCountBadge?: CourierUnreadCountBadge;\n\n constructor(themeBus: CourierInboxThemeManager) {\n super();\n this._themeSubscription = themeBus.subscribe((_: CourierInboxTheme) => {\n this.updateTheme();\n });\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 const style = document.createElement('style');\n style.textContent = this.getStyles();\n\n this._container.appendChild(style);\n this._container.appendChild(this._triggerButton);\n this._container.appendChild(this._unreadCountBadge);\n this.shadow.appendChild(this._container);\n\n // Set the theme of the button\n this.updateTheme();\n\n return this._container;\n }\n\n private getStyles(): string {\n return `\n .menu-button-container {\n position: relative;\n display: inline-block;\n }\n \n #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.updateTheme();\n }\n\n private updateTheme() {\n const theme = this._themeSubscription.manager.getTheme();\n\n // Trigger button\n this._triggerButton?.updateIconColor(theme?.popup?.button?.icon?.color ?? CourierColors.black[500]);\n this._triggerButton?.updateIconSVG(theme?.popup?.button?.icon?.svg ?? CourierIconSVGs.inbox);\n this._triggerButton?.updateBackgroundColor(theme?.popup?.button?.backgroundColor ?? 'transparent');\n this._triggerButton?.updateHoverBackgroundColor(theme?.popup?.button?.hoverBackgroundColor ?? CourierColors.black[500_10]);\n this._triggerButton?.updateActiveBackgroundColor(theme?.popup?.button?.activeBackgroundColor ?? CourierColors.black[500_20]);\n\n // Unread count badge\n this._unreadCountBadge?.refreshTheme('button');\n\n }\n\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nif (!customElements.get('courier-inbox-menu-button')) {\n customElements.define('courier-inbox-menu-button', CourierInboxMenuButton);\n}\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 } from \"@trycourier/courier-ui-core\";\nimport { Courier } from \"@trycourier/courier-js\";\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 CourierInboxMenu extends HTMLElement implements CourierInboxDatastoreEvents {\n\n // State\n private _width: string = '440px';\n private _height: string = '440px';\n private _popupAlignment: CourierInboxPopupAlignment = 'top-right';\n private _top: string = '40px';\n private _right: string = '0';\n private _bottom: string = '40px';\n private _left: string = '0';\n\n // Theming\n private _themeManager = new CourierInboxThemeManager(defaultLightTheme);\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n // Components\n private _triggerButton: CourierInboxMenuButton;\n private _popup: HTMLDivElement;\n private _inbox: CourierInbox;\n private _style: HTMLStyleElement;\n\n // Listeners\n private _datastoreListener?: CourierInboxDataStoreListener;\n\n // Factories\n private _popupMenuButtonFactory?: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement;\n\n static get observedAttributes() {\n return ['popup-alignment', 'message-click', 'message-action-click', 'message-long-press', 'popup-width', 'popup-height', 'top', 'right', 'bottom', 'left', 'light-theme', 'dark-theme', 'mode'];\n }\n\n constructor() {\n super();\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n // Create trigger button\n this._triggerButton = new CourierInboxMenuButton(this._themeManager);\n this._triggerButton.build(undefined);\n\n // Create popup container\n this._popup = document.createElement('div');\n this._popup.className = 'popup';\n\n // Create content container\n this._inbox = new CourierInbox(this._themeManager);\n this._inbox.setAttribute('height', '100%');\n\n this._style = document.createElement('style');\n this.refreshTheme();\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._triggerButton);\n shadow.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 // Refresh the theme on change\n this._themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n }\n\n private refreshTheme() {\n this._style.textContent = this.getStyles();\n }\n\n private getStyles(): string {\n return `\n :host {\n display: inline-block;\n position: relative;\n }\n\n .menu-button-container {\n position: relative;\n display: inline-block;\n }\n\n .popup {\n display: none;\n position: absolute;\n background: ${this.theme.popup?.window?.backgroundColor ?? 'red'};\n border-radius: ${this.theme.popup?.window?.borderRadius ?? '8px'};\n border: ${this.theme.popup?.window?.border ?? `1px solid red`};\n box-shadow: ${this.theme.popup?.window?.shadow ?? `0px 8px 16px -4px red`};\n z-index: 1000;\n width: ${this._width};\n height: ${this._height};\n overflow: hidden;\n transform: translateZ(0);\n will-change: transform;\n }\n \n #unread-badge {\n position: absolute;\n top: -8px;\n left: 50%;\n pointer-events: none;\n }\n\n courier-inbox {\n height: 100%;\n }\n `;\n }\n\n attributeChangedCallback(name: string, _: string, newValue: string) {\n switch (name) {\n case 'popup-alignment':\n if (this.isValidPosition(newValue)) {\n this._popupAlignment = newValue as CourierInboxPopupAlignment;\n this.updatePopupPosition();\n }\n break;\n case 'popup-width':\n this._width = newValue;\n this.setSize(newValue, this._height);\n break;\n case 'popup-height':\n this._height = newValue;\n this.setSize(this._width, newValue);\n break;\n case 'top':\n this._top = newValue;\n this.updatePopupPosition();\n break;\n case 'right':\n this._right = newValue;\n this.updatePopupPosition();\n break;\n case 'bottom':\n this._bottom = newValue;\n this.updatePopupPosition();\n break;\n case 'left':\n this._left = newValue;\n this.updatePopupPosition();\n break;\n case 'light-theme':\n if (newValue) {\n this.setLightTheme(JSON.parse(newValue));\n }\n break;\n case 'dark-theme':\n if (newValue) {\n this.setDarkTheme(JSON.parse(newValue));\n }\n break;\n case 'mode':\n this._themeManager.setMode(newValue as CourierComponentThemeMode);\n break;\n }\n }\n\n public onUnreadCountChange(_: number): void {\n this.render();\n }\n\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox.onMessageClick(handler);\n }\n\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._inbox.onMessageActionClick(handler);\n }\n\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox.onMessageLongPress(handler);\n }\n\n private isValidPosition(value: string): value is CourierInboxPopupAlignment {\n const validPositions: CourierInboxPopupAlignment[] = [\n 'top-right', 'top-left', 'top-center',\n 'bottom-right', 'bottom-left', 'bottom-center',\n 'center-right', 'center-left', 'center-center'\n ];\n return validPositions.includes(value as CourierInboxPopupAlignment);\n }\n\n private updatePopupPosition() {\n // 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 const isVisible = this._popup.style.display === 'block';\n\n if (!isVisible) {\n this._popup.style.display = 'block';\n } else {\n this._popup.style.display = 'none';\n }\n }\n\n private handleOutsideClick(event: MouseEvent) {\n if (!this.contains(event.target as Node)) {\n this._popup.style.display = 'none';\n }\n }\n\n public setContent(element: HTMLElement) {\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 this._popup.style.width = width;\n this._popup.style.height = height;\n }\n\n public setPosition(position: CourierInboxPopupAlignment) {\n if (this.isValidPosition(position)) {\n this._popupAlignment = position;\n this.updatePopupPosition();\n } else {\n Courier.shared.client?.options.logger?.error(`Invalid position: ${position}`);\n }\n }\n\n public setFeedType(feedType: CourierInboxFeedType) {\n this._inbox.setFeedType(feedType);\n }\n\n // Factory methods\n public setPopupHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setHeader(factory);\n }\n\n public removePopupHeader() {\n this._inbox.removeHeader();\n }\n\n public setPopupLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setLoadingState(factory);\n }\n\n public setPopupEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setEmptyState(factory);\n }\n\n public setPopupErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setErrorState(factory);\n }\n\n public setPopupListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setListItem(factory);\n }\n\n public setPopupPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setPaginationItem(factory);\n }\n\n public setPopupMenuButton(factory: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement) {\n this._popupMenuButtonFactory = factory;\n this.render();\n }\n\n private render() {\n const unreadCount = CourierInboxDatastore.shared.unreadCount;\n 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 disconnectedCallback() {\n this._datastoreListener?.remove();\n this._themeManager.cleanup();\n }\n}\n\nif (!customElements.get('courier-inbox-menu')) {\n customElements.define('courier-inbox-menu', CourierInboxMenu);\n}\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":["__defProp","Object","defineProperty","__publicField","obj","key","value","enumerable","configurable","writable","__defNormalProp","CourierColors","theme","light","colors","primary","secondary","border","link","icon","button","cornerRadius","dark","getSystemThemeMode","window","matchMedia","matches","addSystemThemeModeListener","callback","mediaQuery","handler","e","addEventListener","removeEventListener","CourierSystemThemeElement","HTMLElement","constructor","super","this","_currentSystemTheme","_systemThemeCleanup","mode","onSystemThemeChange","currentSystemTheme","disconnectedCallback","_","baseButtonStyles","borderRadius","fontSize","CourierButtonVariants","backgroundColor","textColor","fontWeight","shadow","CourierButton","props","attachShadow","_button","document","createElement","setAttribute","_style","textContent","getStyles","appendChild","updateButton","preventDefault","stopPropagation","onClick","defaultBorderRadius","defaultFontWeight","fontFamily","defaultFontSize","defaultBackgroundColor","defaultTextColor","defaultBorder","defaultShadow","hoverBackgroundColor","activeBackgroundColor","text","customElements","get","define","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","connectedCallback","slot","updateHref","attributeChangedCallback","name","oldValue","newValue","pointerEvents","hasAttribute","opacity","updateTarget","updateFontFamily","updateFontSize","href","getAttribute","variant","setProperty","removeProperty","underline","toString","target","CourierElement","build","newElement","replaceChildren","element","defaultElement","cssText","CourierInfoState","_props","_a","_b","container","_title","title","className","_buttonClickCallback","updateStyles","_c","_d","setButtonClickCallback","CourierIconButton","height","width","_borderRadius","_backgroundColor","_hoverBackgroundColor","_activeBackgroundColor","_height","_width","_icon","updateIconColor","updateIconSVG","updateBackgroundColor","updateHoverBackgroundColor","updateActiveBackgroundColor","copyMessage","message","copy","actions","map","action","data","JSON","parse","stringify","copyInboxAction","tags","trackingIds","copyInboxDataSet","dataSet","messages","class","forEach","componentClass","CourierListItemActionMenu","_theme","menu","list","item","setOptions","options","_options","renderMenu","shadowRoot","querySelector","menuTheme","cancelEvent","opt","handleInteraction","show","classList","add","hide","remove","_CourierInboxDatastore","shared","instance","unreadCount","_unreadCount","inboxDataSet","_inboxDataSet","feedType","canPaginate","paginationCursor","archiveDataSet","_archiveDataSet","addDataStoreListener","listener","_dataStoreListeners","push","removeDataStoreListener","l","fetchDataSet","canUseCache","response","Courier","client","getMessages","getArchivedMessages","nodes","_g","_e","_f","pageInfo","hasNextPage","_j","_h","_i","startCursor","fetchUnreadCount","getUnreadMessageCount","load","userId","Error","properties","Promise","all","events","onDataSetChange","call","onUnreadCountChange","error","courierJs","logger","onError","listenForUpdates","ensureDataSetsLoaded","connectSocket","dataSetPromises","socket","info","connectionId","isConnected","receivedMessage","addMessage","receivedMessageEvent","event","messageId","getMessage","readAllMessages","canCallApi","readMessage","unreadMessage","openMessage","archiveMessage","archiveReadMessages","clickMessage","unarchiveMessage","connect","sendSubscribe","keepAlive","_l","_k","find","m","fetchNextPageOfMessages","isPaginatingInbox","paginationLimit","addPage","isPaginatingArchive","_m","_p","_o","_s","_q","_r","_v","_t","_u","_x","_w","canMutate","datastoreSnapshot","getDatastoreSnapshot","snapshot","getMessageSnapshot","Date","toISOString","applyMessageSnapshot","applyDatastoreSnapshot","inboxIndex","archiveIndex","opened","open","clickTrackingId","click","trackingId","messageSnapshot","archived","removeMessage","insertIndex","findInsertIndex","timestamp","findIndex","splice","archiveAllMessages","archiveAll","readAll","newMessage","i","length","created","onPageAdded","index","onMessageAdd","onMessageRemove","updateMessage","Math","max","onMessageUpdate","CourierInboxDatastore","CourierListItem","_isMobile","contentContainer","_titleElement","_subtitleElement","_actionsContainer","_timeElement","_unreadIndicator","_refreshStyles","_menu","_getMenuOptions","append","cancelPropagation","contains","composedPath","includes","_message","onItemClick","_isLongPress","_setupHoverBehavior","_setupLongPressBehavior","_showMenu","_hideMenu","enabled","longPress","_longPressTimeout","setTimeout","onItemLongPress","navigator","vibrate","vibrationDuration","displayDuration","passive","clearTimeout","setOnLongPress","cb","isArchiveFeed","_feedType","id","_n","display","_getStyles","listItem","divider","unreadIndicatorColor","family","size","subtitle","time","messageAttr","feedTypeAttr","_updateContent","err","setMessage","setOnItemClick","setOnItemActionClick","onItemActionClick","setOnItemLongPress","toggle","preview","body","now","messageDate","diffInSeconds","floor","getTime","getMessageTime","hasActions","actionsTheme","actionButton","content","font","weight","CourierInboxSkeletonListItem","_shadow","firstRow","CourierSkeletonAnimatedRow","secondRow","thirdRow","widthPercent","skeletonItem","loading","animation","barColor","hexColor","r","parseInt","slice","g","b","colorWithAlpha80","colorWithAlpha40","barHeight","duration","barBorderRadius","CourierInboxSkeletonList","CourierInboxPaginationListItem","onPaginationTrigger","customItem","skeletonLoadingList","observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","CourierInboxList","_themeSubscription","themeManager","subscribe","refreshTheme","_onRefresh","onRefresh","_onPaginationTrigger","_onMessageClick","onMessageClick","_onMessageActionClick","onMessageActionClick","_onMessageLongPress","onMessageLongPress","_messages","manager","getTheme","reset","firstChild","removeChild","setDataSet","_canPaginate","Boolean","_error","_isLoading","render","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","errorElement","_y","_z","_errorStateFactory","_A","loadingElement","_B","_loadingStateFactory","_C","empty","_D","emptyElement","_E","_G","_F","_I","_H","_K","_J","_M","_L","_N","_O","_P","_Q","_S","_R","_U","_T","_W","_V","_Y","_X","_Z","__","_$","_aa","_emptyStateFactory","_ba","_ca","_listItemFactory","paginationItem","_da","_paginationItemFactory","setLoadingStateFactory","factory","setEmptyStateFactory","setErrorStateFactory","setListItemFactory","setPaginationItemFactory","unsubscribe","CourierInboxOptionMenuItem","_option","option","_isSelected","isSelected","_themeManager","_content","_itemIcon","spacer","_selectionIcon","selectable","header","menus","popup","selectionIcon","CourierInboxOptionMenu","type","onMenuOpen","_type","_selectable","_selectedIndex","_onMenuOpen","_menuButton","toggleMenu","bind","handleOutsideClick","isFilter","buttonConfig","filters","defaultIcon","refreshMenuItems","menuItem","closeMenu","isOpening","selectOption","o","CourierUnreadCountBadge","_location","location","themeBus","_badge","indicator","unreadIndicator","setCount","count","_count","updateBadge","CourierInboxHeaderTitle","_container","_iconElement","_unreadBadge","updateFilter","updateSelectedOption","CourierInboxHeader","_onFeedTypeChange","onFeedTypeChange","getFilterOptions","filterMenu","handleOptionMenuItemClick","getActionOptions","actionMenu","markAllRead","observedAttributes","boxShadow","_filterMenu","_actionMenu","_titleSection","refreshTitleSection","filterOptions","CourierInboxDataStoreListener","defaultLightTheme","defaultDarkTheme","mergeTheme","defaultTheme","_ea","_ha","_ga","_la","_ia","_ja","_ka","_pa","_ma","_na","_oa","_ua","_ta","_sa","_ra","_qa","_za","_ya","_xa","_wa","_va","_Ea","_Da","_Ca","_Ba","_Aa","_Ja","_Ia","_Ha","_Ga","_Fa","_Ma","_La","_Ka","_Pa","_Oa","_Ta","_Qa","_Ra","_Sa","_Xa","_Ua","_Va","_Wa","_ab","_$a","__a","_Za","_Ya","_fb","_eb","_db","_cb","_bb","_jb","_gb","_hb","_ib","_nb","_kb","_lb","_mb","_sb","_rb","_qb","_pb","_ob","_xb","_wb","_vb","_ub","_tb","_Ab","_zb","_yb","_Db","_Cb","_Hb","_Eb","_Fb","_Gb","_Lb","_Ib","_Jb","_Kb","_Qb","_Pb","_Ob","_Nb","_Mb","_Vb","_Ub","_Tb","_Sb","_Rb","_Zb","_Wb","_Xb","_Yb","_bc","__b","_$b","_ac","_gc","_fc","_ec","_dc","_cc","_lc","_kc","_jc","_ic","_hc","_pc","_mc","_nc","_oc","_tc","_qc","_rc","_sc","_yc","_xc","_wc","_vc","_uc","_Dc","_Cc","_Bc","_Ac","_zc","_Ec","_Fc","_Hc","_Gc","_Jc","_Ic","_Mc","_Lc","_Kc","_Pc","_Oc","_Tc","_Qc","_Rc","_Sc","_Xc","_Uc","_Vc","_Wc","_ad","_$c","__c","_Zc","_Yc","_fd","_ed","_dd","_cd","_bd","_kd","_jd","_id","_hd","_gd","_pd","_od","_nd","_md","_ld","_ud","_td","_sd","_rd","_qd","_zd","_yd","_xd","_wd","_vd","_Ed","_Dd","_Cd","_Bd","_Ad","_Jd","_Id","_Hd","_Gd","_Fd","_Kd","_Ld","_Md","_Nd","_Od","_Pd","CourierInboxThemeManager","initialTheme","_target","EventTarget","_userMode","_systemMode","setLightTheme","setDarkTheme","updateTheme","_lightTheme","_darkTheme","mergedTheme","setTheme","dispatchEvent","CustomEvent","THEME_CHANGE_EVENT","detail","setMode","controller","AbortController","signal","subscription","abort","_subscriptions","indexOf","cleanup","CourierInbox","_currentFeed","_header","_list","async","bubbles","composed","_datastoreListener","updateHeader","_authListener","addAuthenticationListener","_defaultProps","setHeader","_headerFactory","removeHeader","setLoadingState","setEmptyState","setErrorState","setListItem","setPaginationItem","messageCount","headerElement","Function","CourierInboxMenuButton","_triggerButton","_unreadCountBadge","CourierInboxMenu","_popup","_inbox","togglePopup","updatePopupPosition","isValidPosition","_popupAlignment","setSize","_top","_right","_bottom","_left","top","bottom","left","right","margin","transform","isVisible","setContent","setPosition","position","setPopupHeader","removePopupHeader","setPopupLoadingState","setPopupEmptyState","setPopupErrorState","setPopupListItem","setPopupPaginationItem","setPopupMenuButton","_popupMenuButtonFactory","customButton","___"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../courier-ui-core/dist/index.mjs","../src/utils/utils.ts","../src/components/courier-inbox-list-item-menu.ts","../src/datastore/datastore.ts","../src/components/courier-inbox-list-item.ts","../src/components/courier-inbox-skeleton-list-item.ts","../src/components/courier-inbox-skeleton-list.ts","../src/components/courier-inbox-pagination-list-item.ts","../src/components/courier-inbox-list.ts","../src/components/courier-inbox-option-menu-item.ts","../src/components/courier-inbox-option-menu.ts","../src/components/courier-unread-count-badge.ts","../src/components/courier-inbox-header-title.ts","../src/components/courier-inbox-header.ts","../src/datastore/datastore-listener.ts","../src/types/courier-inbox-theme.ts","../src/types/courier-inbox-theme-manager.ts","../src/components/courier-inbox.ts","../src/components/courier-inbox-menu-button.ts","../src/components/courier-inbox-popup-menu.ts","../src/datastore/datatore-events.ts","../src/utils/extensions.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __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);\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 BaseElement = typeof window === \"undefined\" ? class {\n constructor() {\n }\n} : class extends HTMLElement {\n constructor() {\n super();\n }\n};\nclass CourierSystemThemeElement extends BaseElement {\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 get currentSystemTheme() {\n return this._currentSystemTheme;\n }\n disconnectedCallback() {\n if (this._systemThemeCleanup) {\n this._systemThemeCleanup();\n }\n }\n onSystemThemeChange(_) {\n }\n}\nconst baseButtonStyles = {\n borderRadius: \"4px\",\n fontSize: \"14px\"\n};\nconst CourierButtonVariants = {\n primary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.primary,\n textColor: theme[mode].colors.secondary,\n fontWeight: \"500\",\n shadow: \"none\"\n }),\n secondary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.secondary,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: `1px solid ${theme[mode].colors.border}`,\n shadow: mode === \"light\" ? \"0px 1px 2px 0px rgba(0, 0, 0, 0.06)\" : \"0px 1px 2px 0px rgba(255, 255, 255, 0.1)\"\n }),\n tertiary: (mode) => ({\n ...baseButtonStyles,\n backgroundColor: theme[mode].colors.border,\n textColor: theme[mode].colors.primary,\n fontWeight: \"500\",\n border: \"none\",\n shadow: \"none\"\n })\n};\nclass CourierButton extends CourierSystemThemeElement {\n constructor(props) {\n super();\n // Components\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n const shadow = this.attachShadow({ mode: \"open\" });\n this._button = document.createElement(\"button\");\n this._button.setAttribute(\"part\", \"button\");\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(props);\n shadow.appendChild(this._style);\n shadow.appendChild(this._button);\n this.updateButton(props);\n this._button.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (props.onClick) {\n props.onClick();\n }\n });\n }\n getStyles(props) {\n const defaultTextColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.textColor;\n };\n const defaultBackgroundColor = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.backgroundColor;\n };\n const defaultBorder = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.border;\n };\n const defaultShadow = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.shadow;\n };\n const defaultBorderRadius = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.borderRadius;\n };\n const defaultFontSize = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontSize;\n };\n const defaultFontWeight = () => {\n const secondary = CourierButtonVariants.secondary(this.currentSystemTheme);\n return secondary.fontWeight;\n };\n return `\n :host {\n display: inline-block;\n }\n\n button {\n border: none;\n border-radius: ${props.borderRadius ?? defaultBorderRadius()};\n font-weight: ${props.fontWeight ?? defaultFontWeight()};\n font-family: ${props.fontFamily ?? \"inherit\"};\n font-size: ${props.fontSize ?? defaultFontSize()};\n padding: 6px 10px;\n cursor: pointer;\n width: 100%;\n height: 100%;\n background-color: ${props.backgroundColor ?? defaultBackgroundColor()};\n color: ${props.textColor ?? defaultTextColor()};\n border: ${props.border ?? defaultBorder()};\n box-shadow: ${props.shadow ?? defaultShadow()};\n touch-action: manipulation;\n }\n\n button:hover {\n ${props.hoverBackgroundColor ? `background-color: ${props.hoverBackgroundColor};` : \"filter: brightness(0.9);\"}\n }\n\n button:active {\n ${props.activeBackgroundColor ? `background-color: ${props.activeBackgroundColor};` : \"filter: brightness(0.8);\"}\n }\n\n button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `;\n }\n updateButton(props) {\n if (props.text) {\n this._button.textContent = props.text;\n }\n this._style.textContent = this.getStyles(props);\n }\n}\nconst CourierIconSVGs = {\n inbox: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 14.5V17C5.5 17.2812 5.71875 17.5 6 17.5H18C18.25 17.5 18.5 17.2812 18.5 17V14.5H15.9375L15.2812 15.8125C15.0938 16.25 14.6562 16.5 14.1875 16.5H9.78125C9.3125 16.5 8.875 16.25 8.6875 15.8125L8.03125 14.5H5.5ZM18.1875 13L16.6562 6.90625C16.5938 6.65625 16.4062 6.5 16.1875 6.5H7.8125C7.5625 6.5 7.375 6.65625 7.3125 6.90625L5.78125 13H8.1875C8.65625 13 9.09375 13.2812 9.3125 13.7188L9.9375 15H14.0312L14.6875 13.7188C14.875 13.2812 15.3125 13 15.7812 13H18.1875ZM4 14.25C4 14.0938 4 13.9375 4.03125 13.7812L5.84375 6.53125C6.09375 5.625 6.875 5 7.8125 5H16.1875C17.0938 5 17.9062 5.625 18.125 6.53125L19.9375 13.7812C19.9688 13.9375 20 14.0938 20 14.25V17C20 18.125 19.0938 19 18 19H6C4.875 19 4 18.125 4 17V14.25Z\" fill=\"currentColor\"/>\n</svg>`,\n archive: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 6.5V8H18.5V6.5H5.5ZM5 5H19C19.5312 5 20 5.46875 20 6V8.5C20 9.0625 19.5312 9.5 19 9.5H5C4.4375 9.5 4 9.0625 4 8.5V6C4 5.46875 4.4375 5 5 5ZM9 11.75C9 11.3438 9.3125 11 9.75 11H14.25C14.6562 11 15 11.3438 15 11.75C15 12.1875 14.6562 12.5 14.25 12.5H9.75C9.3125 12.5 9 12.1875 9 11.75ZM5 17V10.5H6.5V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V10.5H19V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17Z\" fill=\"currentColor\"/>\n</svg>`,\n check: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.793 7.33203C19.0742 7.64453 19.0742 8.11328 18.793 8.39453L10.543 16.6445C10.2305 16.957 9.76172 16.957 9.48047 16.6445L5.23047 12.3945C4.91797 12.1133 4.91797 11.6445 5.23047 11.3633C5.51172 11.0508 5.98047 11.0508 6.26172 11.3633L9.98047 15.082L17.7305 7.33203C18.0117 7.05078 18.4805 7.05078 18.7617 7.33203H18.793Z\" fill=\"currentColor\"/>\n</svg>`,\n filter: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5 7C5 6.59375 5.3125 6.25 5.75 6.25H18.25C18.6562 6.25 19 6.59375 19 7C19 7.4375 18.6562 7.75 18.25 7.75H5.75C5.3125 7.75 5 7.4375 5 7ZM7 12C7 11.5938 7.3125 11.25 7.75 11.25H16.25C16.6562 11.25 17 11.5938 17 12C17 12.4375 16.6562 12.75 16.25 12.75H7.75C7.3125 12.75 7 12.4375 7 12ZM14 17C14 17.4375 13.6562 17.75 13.25 17.75H10.75C10.3125 17.75 10 17.4375 10 17C10 16.5938 10.3125 16.25 10.75 16.25H13.25C13.6562 16.25 14 16.5938 14 17Z\" fill=\"currentColor\"/>\n</svg>`,\n right: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.75 12.547L13.25 17.797C12.9375 18.0783 12.4688 18.0783 12.1875 17.7658C11.9062 17.4533 11.9062 16.9845 12.2188 16.7033L16.375 12.7345H5.75C5.3125 12.7345 5 12.422 5 11.9845C5 11.5783 5.3125 11.2345 5.75 11.2345H16.375L12.2188 7.29703C11.9062 7.01578 11.9062 6.51578 12.1875 6.23453C12.4688 5.92203 12.9688 5.92203 13.25 6.20328L18.75 11.4533C18.9062 11.6095 19 11.797 19 11.9845C19 12.2033 18.9062 12.3908 18.75 12.547Z\" fill=\"currentColor\"/>\n</svg>`,\n remove: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M16.7969 8.27344L13.0469 12.0234L16.7656 15.7422C17.0781 16.0234 17.0781 16.4922 16.7656 16.7734C16.4844 17.0859 16.0156 17.0859 15.7344 16.7734L11.9844 13.0547L8.26562 16.7734C7.98438 17.0859 7.51562 17.0859 7.23438 16.7734C6.92188 16.4922 6.92188 16.0234 7.23438 15.7109L10.9531 11.9922L7.23438 8.27344C6.92188 7.99219 6.92188 7.52344 7.23438 7.21094C7.51562 6.92969 7.98438 6.92969 8.29688 7.21094L12.0156 10.9609L15.7344 7.24219C16.0156 6.92969 16.4844 6.92969 16.7969 7.24219C17.0781 7.52344 17.0781 7.99219 16.7969 8.27344Z\" fill=\"currentColor\"/>\n</svg>`,\n overflow: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M18.5117 11.9883C18.5117 12.5508 18.1992 13.0195 17.7617 13.3008C17.293 13.582 16.6992 13.582 16.2617 13.3008C15.793 13.0195 15.5117 12.5508 15.5117 11.9883C15.5117 11.457 15.793 10.9883 16.2617 10.707C16.6992 10.4258 17.293 10.4258 17.7617 10.707C18.1992 10.9883 18.5117 11.457 18.5117 11.9883ZM13.5117 11.9883C13.5117 12.5508 13.1992 13.0195 12.7617 13.3008C12.293 13.582 11.6992 13.582 11.2617 13.3008C10.793 13.0195 10.5117 12.5508 10.5117 11.9883C10.5117 11.457 10.793 10.9883 11.2617 10.707C11.6992 10.4258 12.293 10.4258 12.7617 10.707C13.1992 10.9883 13.5117 11.457 13.5117 11.9883ZM7.01172 13.4883C6.44922 13.4883 5.98047 13.207 5.69922 12.7383C5.41797 12.3008 5.41797 11.707 5.69922 11.2383C5.98047 10.8008 6.44922 10.4883 7.01172 10.4883C7.54297 10.4883 8.01172 10.8008 8.29297 11.2383C8.57422 11.707 8.57422 12.3008 8.29297 12.7383C8.01172 13.207 7.54297 13.4883 7.01172 13.4883Z\" fill=\"currentColor\"/>\n</svg>`,\n read: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7 6.5C6.71875 6.5 6.5 6.75 6.5 7V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V7C17.5 6.75 17.25 6.5 17 6.5H7ZM5 7C5 5.90625 5.875 5 7 5H17C18.0938 5 19 5.90625 19 7V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17V7ZM15.5312 10.5312L11.5312 14.5312C11.2188 14.8438 10.75 14.8438 10.4688 14.5312L8.46875 12.5312C8.15625 12.25 8.15625 11.7812 8.46875 11.5C8.75 11.1875 9.21875 11.1875 9.53125 11.5L11 12.9688L14.4688 9.46875C14.75 9.1875 15.2188 9.1875 15.5 9.46875C15.8125 9.78125 15.8125 10.25 15.5 10.5312H15.5312Z\" fill=\"currentColor\"/>\n</svg>`,\n archiveRead: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.5 6.5V15.25H16.5V6.5H7.5ZM6 15.25V6.5C6 5.6875 6.65625 5 7.5 5H16.5C17.3125 5 18 5.6875 18 6.5V15.25C18.4062 15.25 18.75 15.5938 18.75 16C18.75 16.4375 18.4062 16.75 18 16.75H6C5.5625 16.75 5.25 16.4375 5.25 16C5.25 15.5938 5.5625 15.25 6 15.25ZM5 13V14.5H4.5V17.5H19.5V14.5H19V13H19.5C20.3125 13 21 13.6875 21 14.5V17.5C21 18.3438 20.3125 19 19.5 19H4.5C3.65625 19 3 18.3438 3 17.5V14.5C3 13.6875 3.65625 13 4.5 13H5ZM15.0312 9.625L11.6875 12.9688C11.5312 13.0938 11.3438 13.1875 11.1562 13.1875C10.9375 13.1875 10.75 13.0938 10.625 12.9688L8.96875 11.2812C8.65625 11 8.65625 10.5312 8.96875 10.25C9.25 9.9375 9.71875 9.9375 10 10.25L11.1562 11.375L13.9688 8.5625C14.25 8.28125 14.7188 8.28125 15 8.5625C15.3125 8.875 15.3125 9.34375 15 9.625H15.0312Z\" fill=\"currentColor\"/>\n</svg>`,\n unread: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M17 6.5H7C6.71875 6.5 6.5 6.75 6.5 7V17C6.5 17.2812 6.71875 17.5 7 17.5H17C17.25 17.5 17.5 17.2812 17.5 17V7C17.5 6.75 17.25 6.5 17 6.5ZM7 5H17C18.0938 5 19 5.90625 19 7V17C19 18.125 18.0938 19 17 19H7C5.875 19 5 18.125 5 17V7C5 5.90625 5.875 5 7 5Z\" fill=\"currentColor\"/>\n</svg>`,\n unarchive: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M5.5 11C5.0625 11 4.75 10.6875 4.75 10.25V5.75C4.75 5.34375 5.0625 5 5.5 5C5.90625 5 6.25 5.34375 6.25 5.75V8.28125L6.875 7.53125C8.15625 6 10.0625 5 12.25 5C16.0938 5 19.25 8.15625 19.25 12C19.25 15.875 16.0938 19 12.25 19C10.6562 19 9.21875 18.5 8.03125 17.625C7.71875 17.375 7.625 16.9062 7.875 16.5625C8.125 16.2188 8.59375 16.1562 8.9375 16.4062C9.84375 17.0938 11 17.5 12.25 17.5C15.2812 17.5 17.75 15.0625 17.75 12C17.75 8.96875 15.2812 6.5 12.25 6.5C10.5312 6.5 9.03125 7.28125 8 8.5L7.15625 9.5H10C10.4062 9.5 10.75 9.84375 10.75 10.25C10.75 10.6875 10.4062 11 10 11H5.5Z\" fill=\"currentColor\"/>\n</svg>`\n};\nclass CourierIcon extends BaseElement {\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 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 BaseElement {\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 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 CourierElement extends CourierSystemThemeElement {\n constructor() {\n super();\n __publicField(this, \"shadow\");\n this.shadow = this.attachShadow({ mode: \"open\" });\n }\n // Build the element with a factory function\n build(newElement) {\n if (newElement === null) {\n this.shadow.replaceChildren();\n return;\n }\n const element = newElement ?? this.defaultElement();\n this.shadow.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 CourierElement {\n constructor(props) {\n super();\n // Props\n __publicField(this, \"_props\");\n // Components\n __publicField(this, \"_title\");\n __publicField(this, \"_button\");\n __publicField(this, \"_style\");\n // Callbacks\n __publicField(this, \"_buttonClickCallback\", null);\n this._props = props;\n }\n defaultElement() {\n var _a, _b;\n const container = document.createElement(\"div\");\n this._title = document.createElement(\"h2\");\n if ((_a = this._props.title) == null ? void 0 : _a.text) {\n this._title.textContent = this._props.title.text;\n }\n this._button = new CourierButton(this._props.button ?? CourierButtonVariants.secondary(this.currentSystemTheme));\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles(this._props);\n container.className = \"container\";\n container.appendChild(this._style);\n container.appendChild(this._title);\n container.appendChild(this._button);\n this.shadow.appendChild(container);\n (_b = this._button) == null ? void 0 : _b.addEventListener(\"click\", () => {\n if (this._buttonClickCallback) {\n this._buttonClickCallback();\n }\n });\n return container;\n }\n onSystemThemeChange(_) {\n this.updateStyles(this._props);\n }\n getStyles(props) {\n var _a, _b, _c, _d;\n return `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n }\n\n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n text-align: center;\n padding: 24px;\n }\n\n .container h2 {\n margin: 0;\n color: ${((_a = props.title) == null ? void 0 : _a.textColor) ?? \"red\"};\n font-size: ${((_b = props.title) == null ? void 0 : _b.fontSize) ?? \"16px\"};\n font-weight: ${((_c = props.title) == null ? void 0 : _c.fontWeight) ?? \"500\"};\n font-family: ${((_d = props.title) == null ? void 0 : _d.fontFamily) ?? \"inherit\"};\n }\n `;\n }\n updateStyles(props) {\n this._props = props;\n if (this._style) {\n this._style.textContent = this.getStyles(props);\n }\n if (this._button) {\n this._button.updateButton(props.button);\n }\n }\n setButtonClickCallback(callback) {\n this._buttonClickCallback = callback;\n }\n}\nclass CourierIconButton extends BaseElement {\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 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(name, element) {\n if (typeof window !== \"undefined\" && !customElements.get(name)) {\n customElements.define(name, element);\n }\n}\nconst components = [\n { name: \"courier-button\", class: CourierButton },\n { name: \"courier-icon\", class: CourierIcon },\n { name: \"courier-link\", class: CourierLink },\n { name: \"courier-info-state\", class: CourierInfoState },\n { name: \"courier-icon-button\", class: CourierIconButton },\n { name: \"courier-system-theme\", class: CourierSystemThemeElement }\n];\ncomponents.forEach(({ name, class: componentClass }) => registerElement(name, componentClass));\nexport {\n BaseElement,\n CourierButton,\n CourierButtonVariants,\n CourierColors,\n CourierElement,\n CourierIcon,\n CourierIconButton,\n CourierIconSVGs,\n CourierInfoState,\n CourierLink,\n CourierSystemThemeElement,\n addSystemThemeModeListener,\n getSystemThemeMode,\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 {\n return {\n ...dataSet,\n messages: dataSet.messages.map(message => copyMessage(message)),\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 < 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 { BaseElement, CourierIconButton, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxIcon, CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxListItemActionMenuOption = {\n id: string;\n icon: CourierInboxIcon;\n onClick: () => void;\n};\n\nexport class CourierInboxListItemMenu extends BaseElement {\n\n // State\n private _theme: CourierInboxTheme;\n private _options: CourierInboxListItemActionMenuOption[] = [];\n\n // Components\n private _style: HTMLStyleElement;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n const shadow = this.attachShadow({ mode: \"open\" });\n\n // Style\n this._style = document.createElement(\"style\");\n this._style.textContent = this.getStyles();\n shadow.appendChild(this._style);\n\n // Menu container\n const menu = document.createElement(\"ul\");\n menu.className = \"menu\";\n shadow.appendChild(menu);\n\n }\n\n private getStyles(): string {\n\n const menu = this._theme.inbox?.list?.item?.menu;\n\n return `\n :host {\n display: block;\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 :host(.visible) {\n opacity: 1;\n pointer-events: auto;\n }\n\n ul.menu {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n }\n\n 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.shadowRoot?.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.classList.add('visible');\n }\n\n hide() {\n this.classList.remove('visible');\n }\n}\n\nregisterElement('courier-inbox-list-item-menu', CourierInboxListItemMenu);","import { Courier, InboxMessage, MessageEvent } 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 fetchDataSet(props: { feedType: CourierInboxFeedType, canUseCache: boolean }): Promise<InboxDataSet> {\n\n // Return existing dataset if available\n if (props.canUseCache) {\n switch (props.feedType) {\n case 'inbox':\n if (this._inboxDataSet) {\n return this._inboxDataSet;\n }\n break;\n case 'archive':\n if (this._archiveDataSet) {\n return this._archiveDataSet;\n }\n break;\n }\n }\n\n // Otherwise fetch new dataset\n const response = props.feedType === 'inbox'\n ? await Courier.shared.client?.inbox.getMessages()\n : await Courier.shared.client?.inbox.getArchivedMessages();\n\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 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?: { feedType: CourierInboxFeedType, canUseCache: boolean }) {\n\n try {\n\n // If the user is not signed in, return early\n if (!Courier.shared.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 ?? { feedType: 'inbox', canUseCache: true };\n\n // Fetch and update the data set and unread count in parallel\n const [dataSet, unreadCount] = await Promise.all([\n this.fetchDataSet(properties),\n this.fetchUnreadCount(properties)\n ]);\n\n switch (properties.feedType) {\n case 'inbox':\n this._inboxDataSet = dataSet;\n break;\n case 'archive':\n this._archiveDataSet = dataSet;\n break;\n }\n\n // Update the unread count\n this._unreadCount = unreadCount;\n\n // Notify the listeners\n this._dataStoreListeners.forEach(listener => {\n listener.events.onDataSetChange?.(dataSet, properties.feedType);\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 /** Listen for inbox and archive dataset updates. */\n public async listenForUpdates() {\n try {\n // Ensure both datasets are loaded since we may receive updates for messages in either.\n await this.ensureDataSetsLoaded();\n\n // Connect to the socket\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 /** Fetch either/both datasets if they aren't already loaded. */\n private async ensureDataSetsLoaded() {\n let dataSetPromises: Promise<void>[] = [];\n\n if (!this._inboxDataSet) {\n dataSetPromises.push(this.load({ feedType: 'inbox', canUseCache: true }));\n }\n\n if (!this._archiveDataSet) {\n dataSetPromises.push(this.load({ feedType: 'archive', canUseCache: true }));\n }\n\n await Promise.all(dataSetPromises);\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 Courier.shared.client?.options.logger?.info('CourierInbox socket connectionId:', Courier.shared.client?.options.connectionId);\n\n // If the socket is already connected, return early\n if (socket.isConnected) {\n Courier.shared.client?.options.logger?.info('CourierInbox socket already connected. Socket will not attempt reconnection.');\n return;\n }\n\n // Handle new messages\n socket.receivedMessage = (message: InboxMessage) => {\n this.addMessage(message, 0, 'inbox');\n };\n\n // Handle message events\n socket.receivedMessageEvent = (event: MessageEvent) => {\n\n let message: InboxMessage | undefined;\n\n // Get the original message if possible\n if (event.messageId) {\n message = this.getMessage({ messageId: event.messageId });\n }\n\n switch (event.event) {\n case 'mark-all-read':\n this.readAllMessages({ canCallApi: false });\n break;\n case 'read':\n if (message) {\n this.readMessage({ message, canCallApi: false });\n }\n break;\n case 'unread':\n if (message) {\n this.unreadMessage({ message, canCallApi: false });\n }\n break;\n case 'opened':\n if (message) {\n this.openMessage({ message, canCallApi: false });\n }\n break;\n case 'archive':\n if (message) {\n this.archiveMessage({ message, canCallApi: false });\n }\n break;\n case 'archive-read':\n this.archiveReadMessages({ canCallApi: false });\n break;\n case 'click':\n if (message) {\n this.clickMessage({ message, canCallApi: false });\n }\n break;\n case 'unarchive':\n if (message) {\n this.unarchiveMessage({ message, canCallApi: false });\n }\n break;\n case 'unopened':\n break;\n }\n };\n\n // Connect and subscribe to socket\n await socket.connect();\n await socket.sendSubscribe();\n socket.keepAlive();\n Courier.shared.client?.options.logger?.info('CourierInbox socket connected');\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 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 listener.events.onDataSetChange?.(inbox, 'inbox');\n listener.events.onDataSetChange?.(archive, 'archive');\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 { Courier, InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { BaseElement, CourierButton, CourierIcon, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\nimport { getMessageTime } from \"../utils/utils\";\nimport { CourierInboxListItemMenu, CourierInboxListItemActionMenuOption } from \"./courier-inbox-list-item-menu\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\n\nexport class CourierListItem extends BaseElement {\n // State\n private _theme: CourierInboxTheme;\n private _message: InboxMessage | null = null;\n private _feedType: CourierInboxFeedType = 'inbox';\n private _isMobile: boolean = false;\n\n // Elements\n private _titleElement: HTMLParagraphElement;\n private _subtitleElement: HTMLParagraphElement;\n private _timeElement: HTMLParagraphElement;\n private _style: HTMLStyleElement;\n private _menu: CourierInboxListItemMenu;\n private _unreadIndicator: HTMLDivElement;\n private _actionsContainer: HTMLDivElement;\n\n // Touch gestures\n private _longPressTimeout: number | null = null;\n private _isLongPress: boolean = false;\n\n // Callbacks\n private onItemClick: ((message: InboxMessage) => void) | null = null;\n private onItemLongPress: ((message: InboxMessage) => void) | null = null;\n private onItemActionClick: ((message: InboxMessage, action: InboxAction) => void) | null = null;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n this._isMobile = 'ontouchstart' in window;\n const shadow = this.attachShadow({ mode: 'open' });\n\n const contentContainer = document.createElement('div');\n contentContainer.className = 'content-container';\n\n // Title\n this._titleElement = document.createElement('p');\n this._titleElement.setAttribute('part', 'title');\n\n // Subtitle\n this._subtitleElement = document.createElement('p');\n this._subtitleElement.setAttribute('part', '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.setAttribute('part', 'time');\n\n // Unread indicator\n this._unreadIndicator = document.createElement('div');\n this._unreadIndicator.className = 'unread-indicator';\n\n // Style element\n this._style = document.createElement('style');\n this._refreshStyles();\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 shadow.append(this._style, 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.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 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) {\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) {\n this._menu.hide();\n this._menu.style.display = 'none';\n this._timeElement.style.opacity = '1';\n }\n }\n\n private _getStyles(): string {\n const listItem = this._theme.inbox?.list?.item;\n\n return `\n :host {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n border-bottom: ${listItem?.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: ${listItem?.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 :host(:hover) {\n background-color: ${listItem?.hoverBackgroundColor ?? 'red'};\n }\n }\n :host(:active) {\n background-color: ${listItem?.activeBackgroundColor ?? 'red'};\n }\n\n /* ───────────────────────── Menu hover / active ────────────────── */\n @media (hover: hover) {\n :host(:hover):has(courier-inbox-list-item-menu:hover, courier-inbox-list-item-menu *:hover, courier-button:hover, courier-button *:hover) {\n background-color: ${listItem?.backgroundColor ?? 'transparent'};\n }\n }\n :host(:active):has(courier-inbox-list-item-menu:active, courier-inbox-list-item-menu *:active, courier-button:active, courier-button *:active) {\n background-color: ${listItem?.backgroundColor ?? 'transparent'};\n }\n\n :host(:last-child) {\n border-bottom: none;\n }\n\n .unread-indicator {\n position: absolute;\n top: 28px;\n left: 6px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: ${listItem?.unreadIndicatorColor ?? 'red'};\n display: none;\n }\n\n :host(.unread) .unread-indicator {\n display: block;\n }\n\n .content-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n margin-right: 12px;\n }\n\n 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 p[part='title'] {\n font-family: ${listItem?.title?.family ?? 'inherit'};\n font-size: ${listItem?.title?.size ?? '14px'};\n color: ${listItem?.title?.color ?? 'red'};\n margin-bottom: 4px;\n }\n\n p[part='subtitle'] {\n font-family: ${listItem?.subtitle?.family ?? 'inherit'};\n font-size: ${listItem?.subtitle?.size ?? '14px'};\n color: ${listItem?.subtitle?.color ?? 'red'};\n }\n\n p[part='time'] {\n font-family: ${listItem?.time?.family ?? 'inherit'};\n font-size: ${listItem?.time?.size ?? '14px'};\n color: ${listItem?.time?.color ?? 'red'};\n text-align: right;\n white-space: nowrap;\n }\n\n courier-inbox-list-item-menu {\n z-index: 1;\n position: absolute;\n top: 8px;\n right: 8px;\n display: none; /* becomes block while visible */\n }\n\n .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 _refreshStyles(): void {\n this._style.textContent = this._getStyles();\n }\n\n // Lifecycle hooks\n connectedCallback(): void {\n const messageAttr = this.getAttribute('message');\n const feedTypeAttr = this.getAttribute('feed-type');\n\n if (feedTypeAttr) {\n this._feedType = feedTypeAttr as CourierInboxFeedType;\n }\n\n if (messageAttr) {\n try {\n this._message = JSON.parse(messageAttr) as InboxMessage;\n this._updateContent();\n } catch (err) {\n Courier.shared.client?.options.logger?.error('CourierListItem – failed to parse message:', err);\n }\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 if (!this._message) {\n this._titleElement.textContent = '';\n this._subtitleElement.textContent = '';\n return;\n }\n\n // Unread marker\n this.classList.toggle('unread', !this._message.read && this._feedType !== 'archive');\n\n this._titleElement.textContent = this._message.title || 'Untitled Message';\n this._subtitleElement.textContent = this._message.preview || this._message.body || '';\n this._timeElement.textContent = getMessageTime(this._message);\n\n // Update menu icons (e.g. read/unread)\n this._menu.setOptions(this._getMenuOptions());\n\n // Update actions container\n const hasActions = this._message?.actions && this._message.actions.length > 0;\n this._actionsContainer.style.display = hasActions ? 'flex' : 'none';\n\n const actionsTheme = this._theme.inbox?.list?.item?.actions;\n\n // Add the actions to the actions container\n this._message?.actions?.forEach(action => {\n\n // Create the action element\n const actionButton = new CourierButton({\n text: action.content,\n variant: 'secondary',\n backgroundColor: actionsTheme?.backgroundColor,\n hoverBackgroundColor: actionsTheme?.hoverBackgroundColor,\n activeBackgroundColor: actionsTheme?.activeBackgroundColor,\n border: actionsTheme?.border,\n borderRadius: actionsTheme?.borderRadius,\n shadow: actionsTheme?.shadow,\n fontFamily: actionsTheme?.font?.family,\n fontSize: actionsTheme?.font?.size,\n fontWeight: actionsTheme?.font?.weight,\n textColor: actionsTheme?.font?.color,\n onClick: () => {\n if (this._message && this.onItemActionClick) {\n this.onItemActionClick(this._message, action);\n }\n },\n });\n\n // Add the action element to the actions container\n this._actionsContainer.appendChild(actionButton);\n });\n }\n}\n\nregisterElement('courier-inbox-list-item', CourierListItem);","import { BaseElement, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme } from \"../types/courier-inbox-theme\";\n\nexport class CourierInboxSkeletonListItem extends BaseElement {\n\n // Shadow root\n private _shadow: ShadowRoot;\n\n constructor(theme: CourierInboxTheme, opacity: number) {\n super();\n this._shadow = this.attachShadow({ mode: 'open' });\n\n // Create style element for gap\n const style = document.createElement('style');\n style.textContent = this.getStyles(opacity);\n this._shadow.appendChild(style);\n\n // Create skeleton items using CourierSkeletonAnimatedRow\n const firstRow = new CourierSkeletonAnimatedRow(theme, 35);\n const secondRow = new CourierSkeletonAnimatedRow(theme, 100);\n const thirdRow = new CourierSkeletonAnimatedRow(theme, 82);\n\n this._shadow.appendChild(firstRow);\n this._shadow.appendChild(secondRow);\n this._shadow.appendChild(thirdRow);\n\n }\n\n private getStyles(opacity: number): string {\n return `\n :host {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n width: 100%;\n box-sizing: border-box;\n opacity: ${opacity};\n }\n `;\n }\n}\n\n// Register the custom element\nregisterElement('courier-inbox-skeleton-list-item', CourierInboxSkeletonListItem);\n\nclass CourierSkeletonAnimatedRow extends BaseElement {\n\n private _shadow: ShadowRoot;\n\n constructor(theme: CourierInboxTheme, widthPercent: number) {\n super();\n this._shadow = this.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = this.getStyles(theme, widthPercent);\n this._shadow.appendChild(style);\n\n const skeletonItem = document.createElement('div');\n skeletonItem.className = 'skeleton-item';\n this._shadow.appendChild(skeletonItem);\n }\n\n private getStyles(theme: CourierInboxTheme, widthPercent: number): 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 :host {\n display: flex;\n height: 100%;\n width: ${widthPercent}%;\n align-items: flex-start;\n justify-content: flex-start;\n }\n\n .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: shimmer ${theme.inbox?.loading?.animation?.duration ?? '2s'} ease-in-out infinite;\n border-radius: ${theme.inbox?.loading?.animation?.barBorderRadius ?? '14px'};\n }\n\n @keyframes shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n }\n `;\n }\n}\n\nregisterElement('courier-skeleton-animated-row', CourierSkeletonAnimatedRow);\n","import { CourierElement, 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 CourierElement {\n\n private _theme: CourierInboxTheme;\n\n constructor(theme: CourierInboxTheme) {\n super();\n this._theme = theme;\n }\n\n defaultElement(): HTMLElement {\n const list = document.createElement('div');\n list.className = 'list';\n\n // Create style element\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n list.appendChild(style);\n\n // Create skeleton items\n for (let i = 0; i < 3; i++) {\n const skeletonItem = new CourierInboxSkeletonListItem(this._theme, 1 / (i + 1)); // TODO: Make this a prop\n list.appendChild(skeletonItem);\n }\n\n this.shadow.appendChild(list);\n return list;\n }\n\n private getStyles(): string {\n return `\n :host {\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 .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n overflow: hidden;\n }\n\n .list > * {\n border-bottom: ${this._theme.inbox?.loading?.divider ?? '1px solid red'};\n }\n\n .list > *:last-child {\n border-bottom: none;\n }\n `;\n }\n}\n\nregisterElement('courier-inbox-skeleton-list', CourierInboxSkeletonList);\n","import { BaseElement, 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 BaseElement {\n\n // Components\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.onPaginationTrigger = props.onPaginationTrigger;\n this.customItem = props.customItem;\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n // Add styles to remove padding/margin and set box-sizing\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n shadow.appendChild(style);\n\n if (this.customItem) {\n shadow.appendChild(this.customItem);\n } else {\n const container = document.createElement('div');\n container.className = 'skeleton-container';\n\n this.skeletonLoadingList = new CourierInboxSkeletonList(props.theme);\n this.skeletonLoadingList.build(undefined);\n container.appendChild(this.skeletonLoadingList);\n\n shadow.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 private getStyles(): string {\n return `\n :host {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n }\n\n .skeleton-container {\n height: 150%;\n }\n `;\n }\n\n disconnectedCallback() {\n this.observer.disconnect();\n }\n\n}\n\nregisterElement('courier-inbox-pagination-list-item', CourierInboxPaginationListItem);\n","import { InboxAction, InboxMessage } from \"@trycourier/courier-js\";\nimport { BaseElement, CourierColors, CourierInfoState, registerElement } from \"@trycourier/courier-ui-core\";\nimport { CourierListItem } 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\";\n\nexport class CourierInboxList extends BaseElement {\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 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 theme subscription\n this._themeSubscription = props.themeManager.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme();\n });\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 const shadow = this.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n shadow.appendChild(style);\n\n }\n\n private getStyles(): string {\n\n const list = this._themeSubscription.manager.getTheme().inbox?.list;\n\n return `\n :host {\n flex: 1;\n width: 100%;\n background-color: ${list?.backgroundColor ?? CourierColors.white[500]};\n }\n\n ul {\n list-style: none;\n padding: 0;\n margin: 0;\n height: 100%;\n }\n `;\n }\n\n private reset(): void {\n // Remove any existing elements from the shadow root\n while (this.shadowRoot?.firstChild) {\n this.shadowRoot.removeChild(this.shadowRoot.firstChild);\n }\n\n // Re-add the style element\n const style = document.createElement('style');\n style.textContent = this.getStyles();\n this.shadowRoot?.appendChild(style);\n }\n\n public setDataSet(dataSet: InboxDataSet): void {\n this._messages = [...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addPage(dataSet: InboxDataSet): void {\n this._messages = [...this._messages, ...dataSet.messages];\n this._canPaginate = Boolean(dataSet.canPaginate);\n this._error = null;\n this._isLoading = false;\n this.render();\n }\n\n public addMessage(message: InboxMessage, index = 0): void {\n this._messages.splice(index, 0, message);\n this.render();\n }\n\n public removeMessage(index = 0): void {\n this._messages.splice(index, 1);\n this.render();\n }\n\n public updateMessage(message: InboxMessage, index = 0): void {\n this._messages[index] = message;\n this.render();\n }\n\n public setFeedType(feedType: CourierInboxFeedType): void {\n this._feedType = feedType;\n this._error = null;\n this._isLoading = true;\n this.render();\n }\n\n public setLoading(isLoading: boolean): void {\n this._error = null;\n this._isLoading = isLoading;\n this.render();\n }\n\n public setError(error: Error | null): void {\n this._error = error;\n this._isLoading = false;\n this._messages = [];\n this.render();\n }\n\n public setErrorNoClient(): void {\n this.setError(new Error('No user signed in'));\n }\n\n private handleRetry(): void {\n this._onRefresh();\n }\n\n private handleRefresh(): void {\n this._onRefresh();\n }\n\n private render(): void {\n this.reset();\n\n const theme = this._themeSubscription.manager.getTheme();\n\n // Error state\n if (this._error) {\n const error = theme.inbox?.error;\n const errorElement = new CourierInfoState({\n title: {\n text: error?.title?.text ?? this._error.message,\n textColor: error?.title?.font?.color,\n fontFamily: error?.title?.font?.family,\n fontSize: error?.title?.font?.size,\n fontWeight: error?.title?.font?.weight\n },\n button: {\n text: error?.button?.text,\n backgroundColor: error?.button?.backgroundColor,\n hoverBackgroundColor: error?.button?.hoverBackgroundColor,\n activeBackgroundColor: error?.button?.activeBackgroundColor,\n textColor: error?.button?.font?.color,\n fontFamily: error?.button?.font?.family,\n fontSize: error?.button?.font?.size,\n fontWeight: error?.button?.font?.weight,\n shadow: error?.button?.shadow,\n border: error?.button?.border,\n borderRadius: error?.button?.borderRadius\n }\n });\n errorElement.build(this._errorStateFactory?.({ feedType: this._feedType, error: this._error }));\n errorElement.setButtonClickCallback(() => this.handleRetry());\n this.shadowRoot?.appendChild(errorElement);\n return;\n }\n\n // Loading state\n if (this._isLoading) {\n const loadingElement = new CourierInboxSkeletonList(theme);\n loadingElement.build(this._loadingStateFactory?.({ feedType: this._feedType }));\n this.shadowRoot?.appendChild(loadingElement);\n return;\n }\n\n // Empty state\n if (this._messages.length === 0) {\n const empty = theme.inbox?.empty;\n const emptyElement = new CourierInfoState({\n title: {\n text: empty?.title?.text ?? `No ${this._feedType} messages yet`,\n textColor: empty?.title?.font?.color,\n fontFamily: empty?.title?.font?.family,\n fontSize: empty?.title?.font?.size,\n fontWeight: empty?.title?.font?.weight\n },\n button: {\n text: empty?.button?.text,\n backgroundColor: empty?.button?.backgroundColor,\n hoverBackgroundColor: empty?.button?.hoverBackgroundColor,\n activeBackgroundColor: empty?.button?.activeBackgroundColor,\n textColor: empty?.button?.font?.color,\n fontFamily: empty?.button?.font?.family,\n fontSize: empty?.button?.font?.size,\n fontWeight: empty?.button?.font?.weight,\n shadow: empty?.button?.shadow,\n border: empty?.button?.border,\n borderRadius: empty?.button?.borderRadius\n }\n });\n emptyElement.build(this._emptyStateFactory?.({ feedType: this._feedType }));\n emptyElement.setButtonClickCallback(() => this.handleRefresh());\n this.shadowRoot?.appendChild(emptyElement);\n return;\n }\n\n // Create list before adding messages\n const list = document.createElement('ul');\n this.shadowRoot?.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 CourierListItem(theme);\n listItem.setMessage(message, this._feedType);\n listItem.setOnItemClick((message) => this._onMessageClick?.(message, index));\n listItem.setOnItemActionClick((message, action) => this._onMessageActionClick?.(message, action, index));\n listItem.setOnItemLongPress((message) => this._onMessageLongPress?.(message, index));\n list.appendChild(listItem);\n });\n\n // Add pagination item if can paginate\n if (this._canPaginate) {\n const paginationItem = new CourierInboxPaginationListItem({\n theme: 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 public refreshTheme(): void {\n this.render();\n }\n\n // Disconnect the theme subscription\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nregisterElement('courier-inbox-list', CourierInboxList);\n","import { BaseElement, 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 BaseElement {\n\n // State\n private _option: CourierInboxMenuOption;\n private _isSelected?: boolean;\n\n // Components\n private _content: HTMLDivElement;\n private _itemIcon: CourierIcon;\n private _title: HTMLParagraphElement;\n private _selectionIcon: CourierIcon;\n private _style: HTMLStyleElement;\n\n // Theme\n private _themeManager: CourierInboxThemeManager;\n\n constructor(props: { option: CourierInboxMenuOption, selectable: boolean, isSelected: boolean, themeManager: CourierInboxThemeManager }) {\n super();\n\n this._option = props.option;\n this._isSelected = props.isSelected;\n this._themeManager = props.themeManager;\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n this._style = document.createElement('style');\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 (props.selectable) {\n this._content.appendChild(this._selectionIcon);\n }\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._content);\n\n this._selectionIcon.style.display = this._isSelected ? 'block' : 'none';\n\n this.refreshTheme();\n\n }\n\n private getStyles(): string {\n\n const theme = this._themeManager.getTheme();\n\n return `\n :host {\n display: flex;\n flex-direction: row;\n padding: 6px 12px;\n cursor: pointer;\n }\n\n :host(:hover) {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.hoverBackgroundColor ?? 'red'};\n }\n\n :host(:active) {\n background-color: ${theme.inbox?.header?.menus?.popup?.list?.activeBackgroundColor ?? 'red'};\n }\n\n .menu-item {\n display: flex;\n align-items: center;\n width: 100%;\n gap: 12px;\n }\n\n .spacer {\n flex: 1;\n }\n\n 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 .check-icon {\n display: none;\n }\n `;\n }\n\n public refreshTheme() {\n\n // Update styles\n this._style.textContent = this.getStyles();\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 this._title.textContent = this._option.text ?? 'Missing Text';\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('courier-inbox-filter-menu-item', CourierInboxOptionMenuItem);\n","import { BaseElement, CourierIconButton, CourierIconSVGs, 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 { CourierInboxIcon } from \"../types/courier-inbox-theme\";\n\nexport type CourierInboxMenuOptionType = 'filters' | 'actions';\n\nexport type CourierInboxMenuOption = {\n id: CourierInboxHeaderMenuItemId;\n text: string;\n icon: CourierInboxIcon;\n selectionIcon?: CourierInboxIcon | null;\n onClick: (option: CourierInboxMenuOption) => void;\n};\n\nexport class CourierInboxOptionMenu extends BaseElement {\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 const shadow = this.attachShadow({ mode: 'open' });\n\n this._menuButton = new CourierIconButton(type === 'filters' ? CourierIconSVGs.filter : CourierIconSVGs.overflow);\n this._menu = document.createElement('div');\n this._menu.className = `menu ${type}`;\n\n this._style = document.createElement('style');\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._menuButton);\n shadow.appendChild(this._menu);\n\n this._menuButton.addEventListener('click', this.toggleMenu.bind(this));\n document.addEventListener('click', this.handleOutsideClick.bind(this));\n\n // Handle the theme change\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n // Set the theme\n this.refreshTheme();\n }\n\n private getStyles(): string {\n const theme = this._themeSubscription.manager.getTheme();\n\n return `\n :host {\n position: relative;\n display: inline-block;\n }\n\n .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 courier-inbox-filter-menu-item {\n border-bottom: ${theme.inbox?.header?.menus?.popup?.list?.divider ?? 'none'};\n }\n\n courier-inbox-filter-menu-item:last-child {\n border-bottom: none;\n }\n `;\n }\n\n private refreshTheme() {\n // Update styles\n this._style.textContent = this.getStyles();\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 this._menu.innerHTML = '';\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 this._menu.style.display = isOpening ? 'block' : 'none';\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 this._menu.style.display = 'none';\n }\n\n public selectOption(option: CourierInboxMenuOption) {\n this._selectedIndex = this._options.findIndex(o => o.id === option.id);\n this.refreshMenuItems();\n }\n\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n}\n\nregisterElement('courier-inbox-option-menu', CourierInboxOptionMenu);\n","import { BaseElement, 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 BaseElement {\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 constructor(props: { themeBus: CourierInboxThemeManager, location: CourierUnreadCountLocation }) {\n super();\n\n this._location = props.location;\n\n // Initialize the theme subscription\n this._themeSubscription = props.themeBus.subscribe((_: CourierInboxTheme) => {\n this.refreshTheme(this._location);\n });\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n // Create badge element\n this._badge = document.createElement('span');\n this._badge.className = 'unread-badge';\n\n // Add styles\n this._style = document.createElement('style');\n this._style.textContent = this.getStyles(this._location);\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._badge);\n }\n\n private getStyles(location: CourierUnreadCountLocation): string {\n\n const theme = this._themeSubscription.manager.getTheme();\n\n // Get the indicator styles\n const indicator = location === 'button'\n ? theme.popup?.button?.unreadIndicator\n : theme.inbox?.header?.filters?.unreadIndicator;\n\n const backgroundColor = indicator?.backgroundColor;\n const borderRadius = indicator?.borderRadius;\n const color = indicator?.font?.color;\n const fontSize = indicator?.font?.size;\n\n // Return the styles\n return `\n :host {\n display: inline-block;\n }\n\n .unread-badge {\n background-color: ${backgroundColor};\n color: ${color};\n border-radius: ${borderRadius};\n padding: 4px 8px;\n font-size: ${fontSize};\n text-align: center;\n display: none;\n pointer-events: none;\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 this._style.textContent = this.getStyles(this._location);\n if (this._count > 0) {\n this._badge.textContent = this._count.toString();\n this._badge.style.display = 'block';\n } else {\n this._badge.style.display = 'none';\n }\n }\n\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nregisterElement('courier-unread-count-badge', CourierUnreadCountBadge);\n","import { CourierIcon, CourierIconSVGs } 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 { registerElement, BaseElement } from \"@trycourier/courier-ui-core\";\n\nexport class CourierInboxHeaderTitle extends BaseElement {\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _option: CourierInboxMenuOption;\n private _feedType?: CourierInboxFeedType;\n\n // Components\n private _titleElement: HTMLHeadingElement;\n private _iconElement: CourierIcon;\n private _unreadBadge: CourierUnreadCountBadge;\n private _container: HTMLDivElement;\n private _style: HTMLStyleElement;\n\n constructor(themeManager: CourierInboxThemeManager, option: CourierInboxMenuOption) {\n super();\n\n this._option = option;\n const shadow = this.attachShadow({ mode: 'open' });\n\n this._style = document.createElement('style');\n\n this._container = document.createElement('div');\n this._container.className = 'title-section';\n\n this._iconElement = new CourierIcon(undefined, this._option.icon.svg);\n\n this._titleElement = document.createElement('h2');\n this._unreadBadge = new CourierUnreadCountBadge({\n themeBus: themeManager,\n location: 'header'\n });\n\n this._container.appendChild(this._iconElement);\n this._container.appendChild(this._titleElement);\n this._container.appendChild(this._unreadBadge);\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._container);\n\n // Subscribe to the theme bus\n this._themeSubscription = themeManager.subscribe((_) => {\n this.refreshTheme(this._feedType ?? 'inbox');\n });\n\n this.refreshTheme(this._feedType ?? 'inbox');\n\n }\n\n private getStyles(): string {\n\n const theme = this._themeSubscription.manager.getTheme();\n\n return `\n .title-section {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n }\n\n courier-icon {\n display: flex;\n align-items: center;\n }\n\n 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 courier-unread-count-badge {\n margin-left: 4px;\n }\n `;\n }\n\n private refreshTheme(feedType: CourierInboxFeedType) {\n this._feedType = feedType;\n this._style.textContent = this.getStyles();\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 this._titleElement.textContent = theme.inbox?.header?.filters?.inbox?.text ?? 'Inbox';\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 this._titleElement.textContent = theme.inbox?.header?.filters?.archive?.text ?? 'Archive';\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 // Disconnect the theme subscription\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nregisterElement('courier-inbox-header-title', CourierInboxHeaderTitle);","import { CourierInboxFeedType } from \"../types/feed-type\";\nimport { CourierIconSVGs, CourierElement, registerElement } 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 { CourierColors } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxThemeManager, CourierInboxThemeSubscription } from \"../types/courier-inbox-theme-manager\";\nimport { CourierInboxDatastore } from \"../datastore/datastore\";\n\nexport type CourierInboxHeaderMenuItemId = CourierInboxFeedType | 'markAllRead' | 'archiveAll' | 'archiveRead';\n\nexport class CourierInboxHeader extends CourierElement {\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // State\n private _feedType: CourierInboxFeedType = 'inbox';\n private _unreadCount: number = 0;\n\n // Menu options\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\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 // 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 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\n static get observedAttributes() {\n return ['icon', 'title', 'feed-type'];\n }\n\n private refreshTheme() {\n\n const theme = this._themeSubscription.manager.getTheme();\n\n // Update header styles\n const header = this.shadow?.querySelector('.courier-inbox-header') as HTMLElement;\n if (header) {\n header.style.backgroundColor = theme.inbox?.header?.backgroundColor ?? CourierColors.white[500];\n header.style.boxShadow = theme.inbox?.header?.shadow ?? `0px 1px 0px 0px ${CourierColors.gray[500]}`;\n }\n\n // Update menus\n this._filterMenu?.setOptions(this.getFilterOptions());\n this._actionMenu?.setOptions(this.getActionOptions());\n\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 this.refreshTitleSection();\n }\n\n private refreshTitleSection() {\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\n // This will put the header above the rest of the elements\n // This is needed incase someone wants to set shadow\n this._style = document.createElement('style');\n this._style.textContent = this.getStyles();\n this.shadow?.appendChild(this._style);\n\n this.refreshTheme();\n\n }\n\n defaultElement(): HTMLElement {\n\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 container = document.createElement('div');\n container.className = 'courier-inbox-header';\n container.appendChild(this._titleSection);\n container.appendChild(spacer);\n container.appendChild(actions);\n\n return container;\n }\n\n private getStyles(): string {\n return `\n :host {\n z-index: 100;\n }\n\n .courier-inbox-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 10px 10px 16px;\n background-color: ${CourierColors.white[500]};\n box-shadow: 0px 1px 0px 0px ${CourierColors.gray[500]};\n }\n\n .header-content {\n display: flex;\n align-items: center;\n flex: 1;\n }\n\n .spacer {\n flex: 1;\n }\n\n .actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n `;\n }\n\n // Disconnect the theme subscription\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n}\n\nregisterElement('courier-inbox-header', 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 CourierInboxFont = {\n family?: string;\n weight?: string;\n size?: string;\n color?: string;\n}\n\nexport type CourierInboxIcon = {\n color?: string;\n svg?: string;\n}\n\nexport type CourierInboxFilterItem = {\n icon?: CourierInboxIcon;\n text?: string;\n}\n\nexport type CourierInboxUnreadIndicator = {\n font?: CourierInboxFont;\n backgroundColor?: string;\n borderRadius?: string;\n}\n\nexport type CourierInboxIconButton = {\n icon?: CourierInboxIcon;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n}\n\nexport type CourierInboxButton = {\n font?: CourierInboxFont;\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 CourierInboxMenuButton = CourierInboxIconButton & {\n unreadIndicator?: CourierInboxUnreadIndicator;\n}\n\nexport type CourierInboxPopup = {\n backgroundColor?: string;\n border?: string;\n borderRadius?: string;\n shadow?: string;\n list?: {\n font?: CourierInboxFont;\n selectionIcon?: CourierInboxIcon;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n divider?: string;\n };\n}\n\nexport type CourierInboxListItem = {\n unreadIndicatorColor?: string;\n backgroundColor?: string;\n hoverBackgroundColor?: string;\n activeBackgroundColor?: string;\n title?: CourierInboxFont;\n subtitle?: CourierInboxFont;\n time?: CourierInboxFont;\n archiveIcon?: CourierInboxIcon;\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?: CourierInboxFont;\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?: CourierInboxIcon;\n unread?: CourierInboxIcon;\n archive?: CourierInboxIcon;\n unarchive?: CourierInboxIcon;\n };\n };\n}\n\nexport type CourierInboxSkeletonLoadingState = {\n animation?: {\n barColor?: string;\n barHeight?: string;\n barBorderRadius?: string;\n duration?: string;\n },\n divider?: string;\n}\n\nexport type CourierInboxInfoState = {\n title?: {\n font?: CourierInboxFont;\n text?: string;\n },\n button?: CourierInboxButton;\n}\n\nexport type CourierMenuItem = {\n icon?: CourierInboxIcon;\n text?: string;\n}\n\nexport type CourierFilterMenu = {\n button?: CourierInboxIconButton;\n inbox?: CourierMenuItem;\n archive?: CourierMenuItem;\n}\n\nexport type CourierActionMenu = {\n button?: CourierInboxIconButton;\n markAllRead?: CourierMenuItem;\n archiveAll?: CourierMenuItem;\n archiveRead?: CourierMenuItem;\n}\n\nexport type CourierInboxTheme = {\n popup?: {\n button?: CourierInboxMenuButton;\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?: CourierInboxFont;\n inbox?: CourierInboxFilterItem;\n archive?: CourierInboxFilterItem;\n unreadIndicator?: CourierInboxUnreadIndicator;\n }\n menus?: {\n popup?: CourierInboxPopup;\n filters?: CourierFilterMenu;\n actions?: CourierActionMenu;\n }\n }\n list?: {\n backgroundColor?: string;\n item?: CourierInboxListItem;\n },\n loading?: CourierInboxSkeletonLoadingState,\n empty?: CourierInboxInfoState,\n error?: CourierInboxInfoState\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.white[500],\n barHeight: '14px',\n barBorderRadius: '14px',\n duration: '2s'\n },\n divider: `1px solid ${CourierColors.gray[400]}`\n },\n empty: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Refresh'\n }\n },\n error: {\n title: {\n font: {\n size: '16px',\n weight: '500',\n color: CourierColors.white[500],\n }\n },\n button: {\n text: 'Retry'\n }\n }\n }\n};\n\n// Deep merge the themes, only overwriting non-optional properties\nexport const mergeTheme = (mode: SystemThemeMode, theme: CourierInboxTheme): CourierInboxTheme => {\n const defaultTheme = mode === 'light' ? defaultLightTheme : defaultDarkTheme;\n return {\n popup: {\n button: {\n ...defaultTheme.popup?.button,\n ...theme.popup?.button,\n icon: {\n ...defaultTheme.popup?.button?.icon,\n ...theme.popup?.button?.icon\n },\n unreadIndicator: {\n ...defaultTheme.popup?.button?.unreadIndicator,\n ...theme.popup?.button?.unreadIndicator\n }\n },\n window: {\n ...defaultTheme.popup?.window,\n ...theme.popup?.window\n }\n },\n inbox: {\n header: {\n ...defaultTheme.inbox?.header,\n ...theme.inbox?.header,\n filters: {\n ...defaultTheme.inbox?.header?.filters,\n ...theme.inbox?.header?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.filters?.inbox,\n ...theme.inbox?.header?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.inbox?.icon,\n ...theme.inbox?.header?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.filters?.archive,\n ...theme.inbox?.header?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.filters?.archive?.icon,\n ...theme.inbox?.header?.filters?.archive?.icon\n }\n },\n unreadIndicator: {\n ...defaultTheme.inbox?.header?.filters?.unreadIndicator,\n ...theme.inbox?.header?.filters?.unreadIndicator\n }\n },\n menus: {\n ...defaultTheme.inbox?.header?.menus,\n ...theme.inbox?.header?.menus,\n popup: {\n ...defaultTheme.inbox?.header?.menus?.popup,\n ...theme.inbox?.header?.menus?.popup,\n list: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list,\n ...theme.inbox?.header?.menus?.popup?.list,\n font: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.font,\n ...theme.inbox?.header?.menus?.popup?.list?.font\n },\n selectionIcon: {\n ...defaultTheme.inbox?.header?.menus?.popup?.list?.selectionIcon,\n ...theme.inbox?.header?.menus?.popup?.list?.selectionIcon\n }\n }\n },\n filters: {\n ...defaultTheme.inbox?.header?.menus?.filters,\n ...theme.inbox?.header?.menus?.filters,\n inbox: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox,\n ...theme.inbox?.header?.menus?.filters?.inbox,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.inbox?.icon,\n ...theme.inbox?.header?.menus?.filters?.inbox?.icon\n }\n },\n archive: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive,\n ...theme.inbox?.header?.menus?.filters?.archive,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.filters?.archive?.icon,\n ...theme.inbox?.header?.menus?.filters?.archive?.icon\n }\n }\n },\n actions: {\n ...defaultTheme.inbox?.header?.menus?.actions,\n ...theme.inbox?.header?.menus?.actions,\n markAllRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead,\n ...theme.inbox?.header?.menus?.actions?.markAllRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.markAllRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.markAllRead?.icon\n }\n },\n archiveAll: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll,\n ...theme.inbox?.header?.menus?.actions?.archiveAll,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveAll?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveAll?.icon\n }\n },\n archiveRead: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead,\n ...theme.inbox?.header?.menus?.actions?.archiveRead,\n icon: {\n ...defaultTheme.inbox?.header?.menus?.actions?.archiveRead?.icon,\n ...theme.inbox?.header?.menus?.actions?.archiveRead?.icon\n }\n }\n }\n }\n },\n list: {\n ...defaultTheme.inbox?.list,\n ...theme.inbox?.list,\n item: {\n ...defaultTheme.inbox?.list?.item,\n ...theme.inbox?.list?.item,\n menu: {\n ...defaultTheme.inbox?.list?.item?.menu,\n ...theme.inbox?.list?.item?.menu,\n item: {\n ...defaultTheme.inbox?.list?.item?.menu?.item,\n ...theme.inbox?.list?.item?.menu?.item,\n read: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.read,\n ...theme.inbox?.list?.item?.menu?.item?.read\n },\n unread: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unread,\n ...theme.inbox?.list?.item?.menu?.item?.unread\n },\n archive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.archive,\n ...theme.inbox?.list?.item?.menu?.item?.archive\n },\n unarchive: {\n ...defaultTheme.inbox?.list?.item?.menu?.item?.unarchive,\n ...theme.inbox?.list?.item?.menu?.item?.unarchive\n }\n }\n }\n }\n },\n loading: {\n ...defaultTheme.inbox?.loading,\n ...theme.inbox?.loading,\n },\n empty: {\n ...defaultTheme.inbox?.empty,\n ...theme.inbox?.empty\n },\n error: {\n ...defaultTheme.inbox?.error,\n ...theme.inbox?.error\n }\n }\n };\n};\n","import { CourierComponentThemeMode, SystemThemeMode, addSystemThemeModeListener, getSystemThemeMode } from \"@trycourier/courier-ui-core\";\nimport { CourierInboxTheme, defaultDarkTheme, defaultLightTheme, mergeTheme } from \"./courier-inbox-theme\";\n\nexport interface CourierInboxThemeSubscription {\n manager: CourierInboxThemeManager;\n unsubscribe: () => void;\n}\n\nexport class CourierInboxThemeManager {\n\n // Event IDs\n private readonly THEME_CHANGE_EVENT: string = 'courier_inbox_theme_change';\n\n // State\n private _theme: CourierInboxTheme;\n private _lightTheme: CourierInboxTheme = defaultLightTheme;\n private _darkTheme: CourierInboxTheme = defaultDarkTheme;\n private _target: EventTarget;\n private _subscriptions: CourierInboxThemeSubscription[] = [];\n\n // System theme\n private _userMode: CourierComponentThemeMode;\n private _systemMode: SystemThemeMode;\n private _systemThemeCleanup: (() => void) | undefined;\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._lightTheme = theme;\n if (this._systemMode === 'light') {\n this.updateTheme();\n }\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._darkTheme = theme;\n if (this._systemMode === 'dark') {\n this.updateTheme();\n }\n }\n\n constructor(initialTheme: CourierInboxTheme) {\n this._theme = initialTheme;\n this._target = new EventTarget();\n this._userMode = 'system' as CourierComponentThemeMode;\n\n // Get the initial system theme\n this._systemMode = getSystemThemeMode();\n this.setLightTheme(defaultLightTheme);\n this.setDarkTheme(defaultDarkTheme);\n\n // Set up system theme listener\n this._systemThemeCleanup = addSystemThemeModeListener((mode: SystemThemeMode) => {\n this._systemMode = mode;\n this.updateTheme();\n });\n }\n\n /**\n * Get the current system theme\n */\n public get currentSystemTheme(): SystemThemeMode {\n return this._systemMode;\n }\n\n /**\n * Get the current theme\n */\n public getTheme() {\n return this._theme;\n }\n\n /**\n * Update the theme\n */\n private updateTheme() {\n\n // Use the user mode or fallback to the system mode\n const mode = this._userMode === 'system' ? this._systemMode : this._userMode;\n\n // Get the theme \n const theme = mode === 'light' ? this._lightTheme : this._darkTheme;\n\n // Merge the theme\n const mergedTheme = mergeTheme(mode, theme);\n\n // Set the theme\n this.setTheme(mergedTheme);\n }\n\n /**\n * Set the theme and notify all listeners\n */\n private setTheme(theme: CourierInboxTheme) {\n if (theme === this._theme) return;\n this._theme = theme;\n this._target.dispatchEvent(new CustomEvent(this.THEME_CHANGE_EVENT, {\n detail: { theme }\n }));\n }\n\n /**\n * Set the mode and notify all listeners\n */\n public setMode(mode: CourierComponentThemeMode) {\n this._userMode = mode;\n this.updateTheme();\n }\n\n /**\n * Subscribe to theme changes\n * @param {Function} callback - Function to run when the theme changes\n * @returns {CourierInboxThemeSubscription} - Object with remove method to stop listening\n */\n subscribe(callback: (theme: CourierInboxTheme) => void): CourierInboxThemeSubscription {\n const controller = new AbortController();\n this._target.addEventListener(this.THEME_CHANGE_EVENT, ((e: Event) => {\n callback((e as CustomEvent<{ theme: CourierInboxTheme }>).detail.theme);\n }) as EventListener, { signal: controller.signal });\n\n const subscription: CourierInboxThemeSubscription = {\n manager: this,\n unsubscribe: () => {\n controller.abort();\n const index = this._subscriptions.indexOf(subscription);\n if (index > -1) {\n this._subscriptions.splice(index, 1);\n }\n }\n };\n\n this._subscriptions.push(subscription);\n return subscription;\n }\n\n /**\n * Clean up event listeners\n */\n public cleanup() {\n if (this._systemThemeCleanup) {\n this._systemThemeCleanup();\n }\n this._subscriptions.forEach(subscription => subscription.unsubscribe());\n this._subscriptions = [];\n }\n\n}","import { AuthenticationListener, Courier, InboxMessage } from \"@trycourier/courier-js\";\nimport { CourierInboxList } from \"./courier-inbox-list\";\nimport { CourierInboxHeader } from \"./courier-inbox-header\";\nimport { BaseElement, CourierComponentThemeMode, CourierIconSVGs, 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\";\n\nexport class CourierInbox extends BaseElement {\n\n // State\n private _currentFeed: CourierInboxFeedType = 'inbox';\n\n // Theming\n private _themeManager: CourierInboxThemeManager;\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n // Components\n private _shadow: ShadowRoot;\n private _list: CourierInboxList;\n private _datastoreListener: CourierInboxDataStoreListener | undefined;\n private _authListener: AuthenticationListener | undefined;\n private _style: HTMLStyleElement;\n\n // Header\n private _header: CourierInboxHeader;\n private _headerFactory: ((props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) | undefined | null = undefined;\n\n // List\n private _onMessageClick?: (props: CourierInboxListItemFactoryProps) => void;\n private _onMessageActionClick?: (props: CourierInboxListItemActionFactoryProps) => void;\n private _onMessageLongPress?: (props: CourierInboxListItemFactoryProps) => void;\n\n // Default props\n private _defaultProps = {\n title: 'Inbox',\n icon: CourierIconSVGs.inbox,\n feedType: this._currentFeed,\n height: '768px'\n };\n\n static get observedAttributes() {\n return ['height', 'light-theme', 'dark-theme', 'mode', 'message-click', 'message-action-click', 'message-long-press'];\n }\n\n constructor(themeManager?: CourierInboxThemeManager) {\n super();\n\n // Attach the shadow DOM\n this._shadow = this.attachShadow({ mode: 'open' });\n\n // Theme\n this._themeManager = themeManager ?? new CourierInboxThemeManager(defaultLightTheme);\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._shadow.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._style = document.createElement('style');\n this.refreshTheme();\n\n this._shadow.appendChild(this._style);\n this._shadow.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 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 this.refresh();\n }\n\n }\n\n private refreshTheme() {\n this._style.textContent = this.getStyles();\n }\n\n private getStyles(): string {\n return `\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: ${this._defaultProps.height};\n }\n\n courier-inbox-header {\n flex-shrink: 0;\n }\n\n 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 feedType: this._currentFeed,\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\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: { feedType: CourierInboxFeedType, canUseCache: boolean }) {\n await CourierInboxDatastore.shared.load(props);\n await CourierInboxDatastore.shared.listenForUpdates();\n }\n\n public refresh() {\n this.load({\n feedType: this._currentFeed,\n canUseCache: false\n });\n }\n\n connectedCallback() {\n this.refresh();\n }\n\n disconnectedCallback() {\n this._themeManager.cleanup();\n this._datastoreListener?.remove();\n this._authListener?.remove();\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\n// Register the custom element\nregisterElement('courier-inbox', CourierInbox);","import { CourierColors, CourierElement, CourierIconButton, CourierIconSVGs, 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 CourierElement {\n\n // Theme\n private _themeSubscription: CourierInboxThemeSubscription;\n\n // Components\n private _container?: HTMLDivElement;\n private _triggerButton?: CourierIconButton;\n private _unreadCountBadge?: CourierUnreadCountBadge;\n\n constructor(themeBus: CourierInboxThemeManager) {\n super();\n this._themeSubscription = themeBus.subscribe((_: CourierInboxTheme) => {\n this.updateTheme();\n });\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 const style = document.createElement('style');\n style.textContent = this.getStyles();\n\n this._container.appendChild(style);\n this._container.appendChild(this._triggerButton);\n this._container.appendChild(this._unreadCountBadge);\n this.shadow.appendChild(this._container);\n\n // Set the theme of the button\n this.updateTheme();\n\n return this._container;\n }\n\n private getStyles(): string {\n return `\n .menu-button-container {\n position: relative;\n display: inline-block;\n }\n \n #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.updateTheme();\n }\n\n private updateTheme() {\n const theme = this._themeSubscription.manager.getTheme();\n\n // Trigger button\n this._triggerButton?.updateIconColor(theme?.popup?.button?.icon?.color ?? CourierColors.black[500]);\n this._triggerButton?.updateIconSVG(theme?.popup?.button?.icon?.svg ?? CourierIconSVGs.inbox);\n this._triggerButton?.updateBackgroundColor(theme?.popup?.button?.backgroundColor ?? 'transparent');\n this._triggerButton?.updateHoverBackgroundColor(theme?.popup?.button?.hoverBackgroundColor ?? CourierColors.black[500_10]);\n this._triggerButton?.updateActiveBackgroundColor(theme?.popup?.button?.activeBackgroundColor ?? CourierColors.black[500_20]);\n\n // Unread count badge\n this._unreadCountBadge?.refreshTheme('button');\n\n }\n\n disconnectedCallback() {\n this._themeSubscription.unsubscribe();\n }\n\n}\n\nregisterElement('courier-inbox-menu-button', 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 } from \"@trycourier/courier-ui-core\";\nimport { Courier } from \"@trycourier/courier-js\";\nimport { BaseElement, 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 BaseElement implements CourierInboxDatastoreEvents {\n\n // State\n private _width: string = '440px';\n private _height: string = '440px';\n private _popupAlignment: CourierInboxPopupAlignment = 'top-right';\n private _top: string = '40px';\n private _right: string = '0';\n private _bottom: string = '40px';\n private _left: string = '0';\n\n // Theming\n private _themeManager = new CourierInboxThemeManager(defaultLightTheme);\n get theme() {\n return this._themeManager.getTheme();\n }\n\n public setLightTheme(theme: CourierInboxTheme) {\n this._themeManager.setLightTheme(theme);\n }\n\n public setDarkTheme(theme: CourierInboxTheme) {\n this._themeManager.setDarkTheme(theme);\n }\n\n // Components\n private _triggerButton: CourierInboxMenuButton;\n private _popup: HTMLDivElement;\n private _inbox: CourierInbox;\n private _style: HTMLStyleElement;\n\n // Listeners\n private _datastoreListener?: CourierInboxDataStoreListener;\n\n // Factories\n private _popupMenuButtonFactory?: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement;\n\n static get observedAttributes() {\n return ['popup-alignment', 'message-click', 'message-action-click', 'message-long-press', 'popup-width', 'popup-height', 'top', 'right', 'bottom', 'left', 'light-theme', 'dark-theme', 'mode'];\n }\n\n constructor() {\n super();\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n // Create trigger button\n this._triggerButton = new CourierInboxMenuButton(this._themeManager);\n this._triggerButton.build(undefined);\n\n // Create popup container\n this._popup = document.createElement('div');\n this._popup.className = 'popup';\n\n // Create content container\n this._inbox = new CourierInbox(this._themeManager);\n this._inbox.setAttribute('height', '100%');\n\n this._style = document.createElement('style');\n this.refreshTheme();\n\n shadow.appendChild(this._style);\n shadow.appendChild(this._triggerButton);\n shadow.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 // Refresh the theme on change\n this._themeManager.subscribe((_) => {\n this.refreshTheme();\n });\n\n }\n\n private refreshTheme() {\n this._style.textContent = this.getStyles();\n }\n\n private getStyles(): string {\n return `\n :host {\n display: inline-block;\n position: relative;\n }\n\n .menu-button-container {\n position: relative;\n display: inline-block;\n }\n\n .popup {\n display: none;\n position: absolute;\n background: ${this.theme.popup?.window?.backgroundColor ?? 'red'};\n border-radius: ${this.theme.popup?.window?.borderRadius ?? '8px'};\n border: ${this.theme.popup?.window?.border ?? `1px solid red`};\n box-shadow: ${this.theme.popup?.window?.shadow ?? `0px 8px 16px -4px red`};\n z-index: 1000;\n width: ${this._width};\n height: ${this._height};\n overflow: hidden;\n transform: translateZ(0);\n will-change: transform;\n }\n \n #unread-badge {\n position: absolute;\n top: -8px;\n left: 50%;\n pointer-events: none;\n }\n\n courier-inbox {\n height: 100%;\n }\n `;\n }\n\n attributeChangedCallback(name: string, _: string, newValue: string) {\n switch (name) {\n case 'popup-alignment':\n if (this.isValidPosition(newValue)) {\n this._popupAlignment = newValue as CourierInboxPopupAlignment;\n this.updatePopupPosition();\n }\n break;\n case 'popup-width':\n this._width = newValue;\n this.setSize(newValue, this._height);\n break;\n case 'popup-height':\n this._height = newValue;\n this.setSize(this._width, newValue);\n break;\n case 'top':\n this._top = newValue;\n this.updatePopupPosition();\n break;\n case 'right':\n this._right = newValue;\n this.updatePopupPosition();\n break;\n case 'bottom':\n this._bottom = newValue;\n this.updatePopupPosition();\n break;\n case 'left':\n this._left = newValue;\n this.updatePopupPosition();\n break;\n case 'light-theme':\n if (newValue) {\n this.setLightTheme(JSON.parse(newValue));\n }\n break;\n case 'dark-theme':\n if (newValue) {\n this.setDarkTheme(JSON.parse(newValue));\n }\n break;\n case 'mode':\n this._themeManager.setMode(newValue as CourierComponentThemeMode);\n break;\n }\n }\n\n public onUnreadCountChange(_: number): void {\n this.render();\n }\n\n public onMessageClick(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox.onMessageClick(handler);\n }\n\n public onMessageActionClick(handler?: (props: CourierInboxListItemActionFactoryProps) => void) {\n this._inbox.onMessageActionClick(handler);\n }\n\n public onMessageLongPress(handler?: (props: CourierInboxListItemFactoryProps) => void) {\n this._inbox.onMessageLongPress(handler);\n }\n\n private isValidPosition(value: string): value is CourierInboxPopupAlignment {\n const validPositions: CourierInboxPopupAlignment[] = [\n 'top-right', 'top-left', 'top-center',\n 'bottom-right', 'bottom-left', 'bottom-center',\n 'center-right', 'center-left', 'center-center'\n ];\n return validPositions.includes(value as CourierInboxPopupAlignment);\n }\n\n private updatePopupPosition() {\n // 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 const isVisible = this._popup.style.display === 'block';\n\n if (!isVisible) {\n this._popup.style.display = 'block';\n } else {\n this._popup.style.display = 'none';\n }\n }\n\n private handleOutsideClick(event: MouseEvent) {\n if (!this.contains(event.target as Node)) {\n this._popup.style.display = 'none';\n }\n }\n\n public setContent(element: HTMLElement) {\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 this._popup.style.width = width;\n this._popup.style.height = height;\n }\n\n public setPosition(position: CourierInboxPopupAlignment) {\n if (this.isValidPosition(position)) {\n this._popupAlignment = position;\n this.updatePopupPosition();\n } else {\n Courier.shared.client?.options.logger?.error(`Invalid position: ${position}`);\n }\n }\n\n public setFeedType(feedType: CourierInboxFeedType) {\n this._inbox.setFeedType(feedType);\n }\n\n // Factory methods\n public setPopupHeader(factory: (props: CourierInboxHeaderFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setHeader(factory);\n }\n\n public removePopupHeader() {\n this._inbox.removeHeader();\n }\n\n public setPopupLoadingState(factory: (props: CourierInboxStateLoadingFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setLoadingState(factory);\n }\n\n public setPopupEmptyState(factory: (props: CourierInboxStateEmptyFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setEmptyState(factory);\n }\n\n public setPopupErrorState(factory: (props: CourierInboxStateErrorFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setErrorState(factory);\n }\n\n public setPopupListItem(factory: (props: CourierInboxListItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setListItem(factory);\n }\n\n public setPopupPaginationItem(factory: (props: CourierInboxPaginationItemFactoryProps | undefined | null) => HTMLElement) {\n this._inbox.setPaginationItem(factory);\n }\n\n public setPopupMenuButton(factory: (props: CourierInboxMenuButtonFactoryProps | undefined | null) => HTMLElement) {\n this._popupMenuButtonFactory = factory;\n this.render();\n }\n\n private render() {\n const unreadCount = CourierInboxDatastore.shared.unreadCount;\n 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 disconnectedCallback() {\n this._datastoreListener?.remove();\n this._themeManager.cleanup();\n }\n}\n\nregisterElement('courier-inbox-popup-menu', 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":["__defProp","Object","defineProperty","__publicField","obj","key","value","enumerable","configurable","writable","__defNormalProp","CourierColors","theme","light","colors","primary","secondary","border","link","icon","button","cornerRadius","dark","getSystemThemeMode","window","matchMedia","matches","addSystemThemeModeListener","callback","mediaQuery","handler","e","addEventListener","removeEventListener","BaseElement","constructor","HTMLElement","super","CourierSystemThemeElement","this","_currentSystemTheme","_systemThemeCleanup","mode","onSystemThemeChange","currentSystemTheme","disconnectedCallback","_","baseButtonStyles","borderRadius","fontSize","CourierButtonVariants","backgroundColor","textColor","fontWeight","shadow","CourierButton","props","attachShadow","_button","document","createElement","setAttribute","_style","textContent","getStyles","appendChild","updateButton","preventDefault","stopPropagation","onClick","defaultBorderRadius","defaultFontWeight","fontFamily","defaultFontSize","defaultBackgroundColor","defaultTextColor","defaultBorder","defaultShadow","hoverBackgroundColor","activeBackgroundColor","text","CourierIconSVGs","inbox","archive","check","filter","overflow","read","archiveRead","unread","unarchive","CourierIcon","color","svg","_color","_svg","_iconContainer","refresh","innerHTML","updateColor","updateSVG","CourierLink","style","updateVariant","updateUnderline","updateMode","connectedCallback","slot","updateHref","attributeChangedCallback","name","oldValue","newValue","pointerEvents","hasAttribute","opacity","updateTarget","updateFontFamily","updateFontSize","href","getAttribute","variant","setProperty","removeProperty","underline","toString","target","CourierElement","build","newElement","replaceChildren","element","defaultElement","cssText","CourierInfoState","_props","_a","_b","container","_title","title","className","_buttonClickCallback","updateStyles","_c","_d","setButtonClickCallback","CourierIconButton","height","width","_borderRadius","_backgroundColor","_hoverBackgroundColor","_activeBackgroundColor","_height","_width","_icon","updateIconColor","updateIconSVG","updateBackgroundColor","updateHoverBackgroundColor","updateActiveBackgroundColor","registerElement","customElements","get","define","copyMessage","message","copy","actions","map","action","data","JSON","parse","stringify","copyInboxAction","tags","trackingIds","copyInboxDataSet","dataSet","messages","class","forEach","componentClass","CourierInboxListItemMenu","_theme","menu","list","item","setOptions","options","_options","renderMenu","shadowRoot","querySelector","menuTheme","cancelEvent","opt","handleInteraction","show","classList","add","hide","remove","_CourierInboxDatastore","shared","instance","unreadCount","_unreadCount","inboxDataSet","_inboxDataSet","feedType","canPaginate","paginationCursor","archiveDataSet","_archiveDataSet","addDataStoreListener","listener","_dataStoreListeners","push","removeDataStoreListener","l","fetchDataSet","canUseCache","response","Courier","client","getMessages","getArchivedMessages","nodes","_g","_e","_f","pageInfo","hasNextPage","_j","_h","_i","startCursor","fetchUnreadCount","getUnreadMessageCount","load","userId","Error","properties","Promise","all","events","onDataSetChange","call","onUnreadCountChange","error","courierJs","logger","onError","listenForUpdates","ensureDataSetsLoaded","connectSocket","dataSetPromises","socket","info","connectionId","isConnected","receivedMessage","addMessage","receivedMessageEvent","event","messageId","getMessage","readAllMessages","canCallApi","readMessage","unreadMessage","openMessage","archiveMessage","archiveReadMessages","clickMessage","unarchiveMessage","connect","sendSubscribe","keepAlive","_l","_k","find","m","fetchNextPageOfMessages","isPaginatingInbox","paginationLimit","addPage","isPaginatingArchive","_m","_p","_o","_s","_q","_r","_v","_t","_u","_x","_w","canMutate","datastoreSnapshot","getDatastoreSnapshot","snapshot","getMessageSnapshot","Date","toISOString","applyMessageSnapshot","applyDatastoreSnapshot","inboxIndex","archiveIndex","opened","open","clickTrackingId","click","trackingId","messageSnapshot","archived","removeMessage","insertIndex","findInsertIndex","timestamp","findIndex","splice","archiveAllMessages","archiveAll","readAll","newMessage","i","length","created","onPageAdded","index","onMessageAdd","onMessageRemove","updateMessage","Math","max","onMessageUpdate","CourierInboxDatastore","CourierListItem","_isMobile","contentContainer","_titleElement","_subtitleElement","_actionsContainer","_timeElement","_unreadIndicator","_refreshStyles","_menu","_getMenuOptions","append","cancelPropagation","contains","composedPath","includes","_message","onItemClick","_isLongPress","_setupHoverBehavior","_setupLongPressBehavior","_showMenu","_hideMenu","enabled","longPress","_longPressTimeout","setTimeout","onItemLongPress","navigator","vibrate","vibrationDuration","displayDuration","passive","clearTimeout","setOnLongPress","cb","isArchiveFeed","_feedType","id","_n","display","_getStyles","listItem","divider","unreadIndicatorColor","family","size","subtitle","time","messageAttr","feedTypeAttr","_updateContent","err","setMessage","setOnItemClick","setOnItemActionClick","onItemActionClick","setOnItemLongPress","toggle","preview","body","now","messageDate","diffInSeconds","floor","getTime","getMessageTime","hasActions","actionsTheme","actionButton","content","font","weight","CourierInboxSkeletonListItem","_shadow","firstRow","CourierSkeletonAnimatedRow","secondRow","thirdRow","widthPercent","skeletonItem","loading","animation","barColor","hexColor","r","parseInt","slice","g","b","colorWithAlpha80","colorWithAlpha40","barHeight","duration","barBorderRadius","CourierInboxSkeletonList","CourierInboxPaginationListItem","onPaginationTrigger","customItem","skeletonLoadingList","observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","CourierInboxList","_themeSubscription","themeManager","subscribe","refreshTheme","_onRefresh","onRefresh","_onPaginationTrigger","_onMessageClick","onMessageClick","_onMessageActionClick","onMessageActionClick","_onMessageLongPress","onMessageLongPress","_messages","manager","getTheme","reset","firstChild","removeChild","setDataSet","_canPaginate","Boolean","_error","_isLoading","render","setFeedType","setLoading","isLoading","setError","setErrorNoClient","handleRetry","handleRefresh","errorElement","_y","_z","_errorStateFactory","_A","loadingElement","_B","_loadingStateFactory","_C","empty","_D","emptyElement","_E","_G","_F","_I","_H","_K","_J","_M","_L","_N","_O","_P","_Q","_S","_R","_U","_T","_W","_V","_Y","_X","_Z","__","_$","_aa","_emptyStateFactory","_ba","_ca","_listItemFactory","paginationItem","_da","_paginationItemFactory","setLoadingStateFactory","factory","setEmptyStateFactory","setErrorStateFactory","setListItemFactory","setPaginationItemFactory","unsubscribe","CourierInboxOptionMenuItem","_option","option","_isSelected","isSelected","_themeManager","_content","_itemIcon","spacer","_selectionIcon","selectable","header","menus","popup","selectionIcon","CourierInboxOptionMenu","type","onMenuOpen","_type","_selectable","_selectedIndex","_onMenuOpen","_menuButton","toggleMenu","bind","handleOutsideClick","isFilter","buttonConfig","filters","defaultIcon","refreshMenuItems","menuItem","closeMenu","isOpening","selectOption","o","CourierUnreadCountBadge","_location","location","themeBus","_badge","indicator","unreadIndicator","setCount","count","_count","updateBadge","CourierInboxHeaderTitle","_container","_iconElement","_unreadBadge","updateFilter","updateSelectedOption","CourierInboxHeader","_onFeedTypeChange","onFeedTypeChange","getFilterOptions","filterMenu","handleOptionMenuItemClick","getActionOptions","actionMenu","markAllRead","observedAttributes","boxShadow","_filterMenu","_actionMenu","_titleSection","refreshTitleSection","filterOptions","CourierInboxDataStoreListener","defaultLightTheme","defaultDarkTheme","mergeTheme","defaultTheme","_ea","_ha","_ga","_la","_ia","_ja","_ka","_pa","_ma","_na","_oa","_ua","_ta","_sa","_ra","_qa","_za","_ya","_xa","_wa","_va","_Ea","_Da","_Ca","_Ba","_Aa","_Ja","_Ia","_Ha","_Ga","_Fa","_Ma","_La","_Ka","_Pa","_Oa","_Ta","_Qa","_Ra","_Sa","_Xa","_Ua","_Va","_Wa","_ab","_$a","__a","_Za","_Ya","_fb","_eb","_db","_cb","_bb","_jb","_gb","_hb","_ib","_nb","_kb","_lb","_mb","_sb","_rb","_qb","_pb","_ob","_xb","_wb","_vb","_ub","_tb","_Ab","_zb","_yb","_Db","_Cb","_Hb","_Eb","_Fb","_Gb","_Lb","_Ib","_Jb","_Kb","_Qb","_Pb","_Ob","_Nb","_Mb","_Vb","_Ub","_Tb","_Sb","_Rb","_Zb","_Wb","_Xb","_Yb","_bc","__b","_$b","_ac","_gc","_fc","_ec","_dc","_cc","_lc","_kc","_jc","_ic","_hc","_pc","_mc","_nc","_oc","_tc","_qc","_rc","_sc","_yc","_xc","_wc","_vc","_uc","_Dc","_Cc","_Bc","_Ac","_zc","_Ec","_Fc","_Hc","_Gc","_Jc","_Ic","_Mc","_Lc","_Kc","_Pc","_Oc","_Tc","_Qc","_Rc","_Sc","_Xc","_Uc","_Vc","_Wc","_ad","_$c","__c","_Zc","_Yc","_fd","_ed","_dd","_cd","_bd","_kd","_jd","_id","_hd","_gd","_pd","_od","_nd","_md","_ld","_ud","_td","_sd","_rd","_qd","_zd","_yd","_xd","_wd","_vd","_Ed","_Dd","_Cd","_Bd","_Ad","_Jd","_Id","_Hd","_Gd","_Fd","_Kd","_Ld","_Md","_Nd","_Od","_Pd","CourierInboxThemeManager","initialTheme","_target","EventTarget","_userMode","_systemMode","setLightTheme","setDarkTheme","updateTheme","_lightTheme","_darkTheme","mergedTheme","setTheme","dispatchEvent","CustomEvent","THEME_CHANGE_EVENT","detail","setMode","controller","AbortController","signal","subscription","abort","_subscriptions","indexOf","cleanup","CourierInbox","_currentFeed","_header","_list","async","bubbles","composed","_datastoreListener","updateHeader","_authListener","addAuthenticationListener","_defaultProps","setHeader","_headerFactory","removeHeader","setLoadingState","setEmptyState","setErrorState","setListItem","setPaginationItem","messageCount","headerElement","Function","CourierInboxMenuButton","_triggerButton","_unreadCountBadge","CourierInboxPopupMenu","_popup","_inbox","togglePopup","updatePopupPosition","isValidPosition","_popupAlignment","setSize","_top","_right","_bottom","_left","top","bottom","left","right","margin","transform","isVisible","setContent","setPosition","position","setPopupHeader","removePopupHeader","setPopupLoadingState","setPopupEmptyState","setPopupErrorState","setPopupListItem","setPopupPaginationItem","setPopupMenuButton","_popupMenuButtonFactory","customButton","___"],"mappings":"ydAAIA,EAAYC,OAAOC,eAEnBC,EAAgB,CAACC,EAAKC,EAAKC,IADT,EAACF,EAAKC,EAAKC,IAAUD,KAAOD,EAAMJ,EAAUI,EAAKC,EAAK,CAAEE,YAAY,EAAMC,cAAc,EAAMC,UAAU,EAAMH,UAAWF,EAAIC,GAAOC,EACjHI,CAAgBN,EAAoB,iBAARC,EAAmBA,EAAM,GAAKA,EAAKC,GACxG,MAAMK,EACG,CAEL,IAAK,UACL,MAAO,YACP,MAAO,aALLA,EAOE,CACJ,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WAXHA,EAaG,CACL,IAAK,UACL,MAAO,YACP,MAAO,aAhBLA,EAkBE,CACJ,IAAK,UACL,IAAK,WAGHC,EAAQ,CACZC,MAAO,CACLC,OAAQ,CACNC,QAASJ,EAAoB,KAC7BK,UAAWL,EAAoB,KAC/BM,OAAQN,EAAmB,KAC3BO,KAAMP,EAAmB,KACzBQ,KAAMR,EAAoB,MAE5BS,OAAQ,CACNC,aAAc,QAGlBC,KAAM,CACJR,OAAQ,CACNC,QAASJ,EAAoB,KAC7BK,UAAWL,EAAoB,KAC/BM,OAAQN,EAAmB,KAC3BO,KAAMP,EAAmB,KACzBQ,KAAMR,EAAoB,MAE5BS,OAAQ,CACNC,aAAc,SAIdE,EAAqB,IACH,oBAAXC,OACF,QAEFA,OAAOC,WAAW,gCAAgCC,QAAU,OAAS,QAExEC,EAA8BC,IAC9B,GAAkB,oBAAXJ,OACT,MAAO,OAGH,MAAAK,EAAaL,OAAOC,WAAW,gCAC/BK,EAAWC,IACNH,EAAAG,EAAEL,QAAU,OAAS,QAAO,EAGvC,OADWG,EAAAG,iBAAiB,SAAUF,GAC/B,KACMD,EAAAI,oBAAoB,SAAUH,EAAO,CACjD,EAEGI,EAAgC,oBAAXV,OAAyB,MAClD,WAAAW,GACF,GACI,cAAcC,YAChB,WAAAD,GACSE,OACX,GAEA,MAAMC,UAAkCJ,EACtC,WAAAC,GACSE,QAEPlC,EAAcoC,KAAM,uBAEpBpC,EAAcoC,KAAM,uBACpBA,KAAKC,oBAAsBjB,IACtBgB,KAAAE,oBAAsBd,GAA4Be,IACrDH,KAAKC,oBAAsBE,EAC3BH,KAAKI,oBAAoBD,EAAI,GAEnC,CACE,sBAAIE,GACF,OAAOL,KAAKC,mBAChB,CACE,oBAAAK,GACMN,KAAKE,qBACPF,KAAKE,qBAEX,CACE,mBAAAE,CAAoBG,GACtB,EAEA,MAAMC,EAAmB,CACvBC,aAAc,MACdC,SAAU,QAENC,EAQQR,IAAU,IACjBK,EACHI,gBAAiBvC,EAAM8B,GAAM5B,OAAOE,UACpCoC,UAAWxC,EAAM8B,GAAM5B,OAAOC,QAC9BsC,WAAY,MACZpC,OAAQ,aAAaL,EAAM8B,GAAM5B,OAAOG,SACxCqC,OAAiB,UAATZ,EAAmB,sCAAwC,6CAWvE,MAAMa,UAAsBjB,EAC1B,WAAAH,CAAYqB,GACHnB,QAEPlC,EAAcoC,KAAM,WACpBpC,EAAcoC,KAAM,UACpB,MAAMe,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SACpCH,KAAAmB,QAAUC,SAASC,cAAc,UACjCrB,KAAAmB,QAAQG,aAAa,OAAQ,UAC7BtB,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUR,GAClCF,EAAAW,YAAY1B,KAAKuB,QACjBR,EAAAW,YAAY1B,KAAKmB,SACxBnB,KAAK2B,aAAaV,GAClBjB,KAAKmB,QAAQ1B,iBAAiB,SAAUD,IACtCA,EAAEoC,iBACFpC,EAAEqC,kBACEZ,EAAMa,SACRb,EAAMa,SACd,GAEA,CACE,SAAAL,CAAUR,GA6BD,MAAA,6HAOcA,EAAMR,cAnBC,KACRE,EAAgCX,KAAKK,oBACtCI,aAiBwBsB,6BACxBd,EAAMH,YAZC,KACNH,EAAgCX,KAAKK,oBACtCS,WAUoBkB,6BACpBf,EAAMgB,YAAc,kCACtBhB,EAAMP,UAlBC,KACJC,EAAgCX,KAAKK,oBACtCK,SAgBgBwB,qIAKXjB,EAAML,iBAvCC,KACXD,EAAgCX,KAAKK,oBACtCO,gBAqC8BuB,uBACpClB,EAAMJ,WA5CM,KACLF,EAAgCX,KAAKK,oBACtCQ,UA0CauB,wBAClBnB,EAAMvC,QArCE,KACFiC,EAAgCX,KAAKK,oBACtC3B,OAmCW2D,4BACZpB,EAAMF,QAlCF,KACFJ,EAAgCX,KAAKK,oBACtCU,OAgCeuB,sFAK5BrB,EAAMsB,qBAAuB,qBAAqBtB,EAAMsB,wBAA0B,yEAIlFtB,EAAMuB,sBAAwB,qBAAqBvB,EAAMuB,yBAA2B,oIAQ9F,CACE,YAAAb,CAAaV,GACPA,EAAMwB,OACHzC,KAAAmB,QAAQK,YAAcP,EAAMwB,MAEnCzC,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUR,EAC7C,EAEA,MAAMyB,EAAkB,CACtBC,MAAO,21BAGPC,QAAS,gkBAGTC,MAAO,8cAGPC,OAAQ,kkBASRC,SAAU,ugCAGVC,KAAM,+qBAGNC,YAAa,+3BAGbC,OAAQ,qYAGRC,UAAW,itBAIb,MAAMC,UAAoBzD,EACxB,WAAAC,CAAYyD,EAAOC,GACVxD,QAEPlC,EAAcoC,KAAM,UACpBpC,EAAcoC,KAAM,QAEpBpC,EAAcoC,KAAM,kBACpBpC,EAAcoC,KAAM,UACpBA,KAAKuD,OAASF,GAASjF,EAAoB,KAC3C4B,KAAKwD,KAAOF,EACZ,MAAMvC,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SACpCH,KAAAyD,eAAiBrC,SAASC,cAAc,OACtCN,EAAAW,YAAY1B,KAAKyD,gBACnBzD,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUzB,KAAKuD,QACvCxC,EAAAW,YAAY1B,KAAKuB,QACxBvB,KAAK0D,SACT,CACE,SAAAjC,CAAU4B,GACD,MAAA,yPAYMA,mBAGjB,CACE,OAAAK,GACM1D,KAAKwD,OACFxD,KAAAyD,eAAeE,UAAY3D,KAAKwD,MAEnCxD,KAAKuD,SACPvD,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUzB,KAAKuD,QAEpD,CACE,WAAAK,CAAYP,GACVrD,KAAKuD,OAASF,EACdrD,KAAK0D,SACT,CACE,SAAAG,CAAUP,GACRtD,KAAKwD,KAAOF,EACZtD,KAAK0D,SACT,EAEA,MAAMI,UAAoBnE,EACxB,WAAAC,GACSE,QACPlC,EAAcoC,KAAM,QACpB,MAAMe,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SACpCH,KAAArB,KAAOyC,SAASC,cAAc,KAC9BrB,KAAArB,KAAK2C,aAAa,OAAQ,QACzB,MAAAyC,EAAQ3C,SAASC,cAAc,SACrC0C,EAAMvC,YAAc,4dAiBmBnD,EAAMC,MAAMC,OAAOI,iTAYnBN,EAAMU,KAAKR,OAAOI,wZAqBzDoC,EAAOW,YAAYqC,GACZhD,EAAAW,YAAY1B,KAAKrB,MACxBqB,KAAKgE,gBACLhE,KAAKiE,kBACLjE,KAAKkE,YACT,CACE,iBAAAC,GACQ,MAAAC,EAAOhD,SAASC,cAAc,QAC/BrB,KAAArB,KAAK+C,YAAY0C,GACtBpE,KAAKqE,YACT,CACE,wBAAAC,CAAyBC,EAAMC,EAAUC,GACvC,GAAID,IAAaC,EACjB,OAAQF,GACN,IAAK,OACHvE,KAAKqE,aACL,MACF,IAAK,UACL,IAAK,OACHrE,KAAKgE,gBACL,MACF,IAAK,WACHhE,KAAKrB,KAAKoF,MAAMW,cAAgB1E,KAAK2E,aAAa,YAAc,OAAS,OACzE3E,KAAKrB,KAAKoF,MAAMa,QAAU5E,KAAK2E,aAAa,YAAc,MAAQ,IAClE,MACF,IAAK,QACH3E,KAAK4D,cACL,MACF,IAAK,YACH5D,KAAKiE,kBACL,MACF,IAAK,SACHjE,KAAK6E,eACL,MACF,IAAK,cACH7E,KAAK8E,mBACL,MACF,IAAK,YACH9E,KAAK+E,iBAGb,CACE,UAAAV,GACQ,MAAAW,EAAOhF,KAAKiF,aAAa,QAC3BD,IACFhF,KAAKrB,KAAKqG,KAAOA,EAEvB,CACE,aAAAhB,GACE,MAAMkB,EAAUlF,KAAKiF,aAAa,YAAc,UAC1C9E,EAAOH,KAAKiF,aAAa,SAAW,QACrCjF,KAAArB,KAAK2C,aAAa,eAAgB4D,GAClClF,KAAArB,KAAK2C,aAAa,YAAanB,EACxC,CACE,WAAAyD,GACQ,MAAAP,EAAQrD,KAAKiF,aAAa,SAC5B5B,EACFrD,KAAKrB,KAAKoF,MAAMoB,YAAY,uBAAwB9B,GAE/CrD,KAAArB,KAAKoF,MAAMqB,eAAe,uBAErC,CACE,eAAAnB,GACE,MAAMoB,EAA+C,SAAnCrF,KAAKiF,aAAa,aACpCjF,KAAKrB,KAAK2C,aAAa,iBAAkB+D,EAAUC,WACvD,CACE,UAAApB,GACE,MAAM/D,EAAOH,KAAKiF,aAAa,SAAW,QACrCjF,KAAArB,KAAK2C,aAAa,YAAanB,EACxC,CACE,YAAA0E,GACQ,MAAAU,EAASvF,KAAKiF,aAAa,UAC7BM,IACFvF,KAAKrB,KAAK4G,OAASA,EAEzB,CACE,gBAAAT,GACQ,MAAA7C,EAAajC,KAAKiF,aAAa,eACjChD,EACFjC,KAAKrB,KAAKoF,MAAMoB,YAAY,6BAA8BlD,GAErDjC,KAAArB,KAAKoF,MAAMqB,eAAe,6BAErC,CACE,cAAAL,GACQ,MAAArE,EAAWV,KAAKiF,aAAa,aAC/BvE,EACFV,KAAKrB,KAAKoF,MAAMoB,YAAY,2BAA4BzE,GAEnDV,KAAArB,KAAKoF,MAAMqB,eAAe,2BAErC,EAEAxH,EAAckG,EAAa,qBAAsB,CAC/C,OACA,UACA,WACA,QACA,YACA,OACA,SACA,cACA,cAEF,MAAM0B,UAAuBzF,EAC3B,WAAAH,GACSE,QACPlC,EAAcoC,KAAM,UACpBA,KAAKe,OAASf,KAAKkB,aAAa,CAAEf,KAAM,QAC5C,CAEE,KAAAsF,CAAMC,GACJ,GAAmB,OAAfA,EAEF,YADA1F,KAAKe,OAAO4E,kBAGR,MAAAC,EAAUF,GAAc1F,KAAK6F,iBAC9B7F,KAAAe,OAAO4E,gBAAgBC,EAChC,CAEE,cAAAC,GACQ,MAAAD,EAAUxE,SAASC,cAAc,OAOhC,OANPuE,EAAQpE,YAAc,0BACtBoE,EAAQ7B,MAAM+B,QAAU,wFAKjBF,CACX,EAEA,MAAMG,UAAyBP,EAC7B,WAAA5F,CAAYqB,GACHnB,QAEPlC,EAAcoC,KAAM,UAEpBpC,EAAcoC,KAAM,UACpBpC,EAAcoC,KAAM,WACpBpC,EAAcoC,KAAM,UAEpBpC,EAAcoC,KAAM,uBAAwB,MAC5CA,KAAKgG,OAAS/E,CAClB,CACE,cAAA4E,GACE,IAAII,EAAIC,EACF,MAAAC,EAAY/E,SAASC,cAAc,OAkBlC,OAjBFrB,KAAAoG,OAAShF,SAASC,cAAc,OACL,OAA3B4E,EAAKjG,KAAKgG,OAAOK,YAAiB,EAASJ,EAAGxD,QACjDzC,KAAKoG,OAAO5E,YAAcxB,KAAKgG,OAAOK,MAAM5D,MAEzCzC,KAAAmB,QAAU,IAAIH,EAAchB,KAAKgG,OAAOnH,QAAU8B,EAAgCX,KAAKK,qBACvFL,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUzB,KAAKgG,QAC9CG,EAAUG,UAAY,YACZH,EAAAzE,YAAY1B,KAAKuB,QACjB4E,EAAAzE,YAAY1B,KAAKoG,QACjBD,EAAAzE,YAAY1B,KAAKmB,SACtBnB,KAAAe,OAAOW,YAAYyE,GACD,OAAtBD,EAAKlG,KAAKmB,UAA4B+E,EAAGzG,iBAAiB,SAAS,KAC9DO,KAAKuG,sBACPvG,KAAKuG,sBACb,IAEWJ,CACX,CACE,mBAAA/F,CAAoBG,GACbP,KAAAwG,aAAaxG,KAAKgG,OAC3B,CACE,SAAAvE,CAAUR,GACJ,IAAAgF,EAAIC,EAAIO,EAAIC,EACT,MAAA,gcAqB6B,OAArBT,EAAKhF,EAAMoF,YAAiB,EAASJ,EAAGpF,YAAc,+BAC7B,OAArBqF,EAAKjF,EAAMoF,YAAiB,EAASH,EAAGxF,WAAa,kCAC9B,OAArB+F,EAAKxF,EAAMoF,YAAiB,EAASI,EAAG3F,aAAe,iCAClC,OAArB4F,EAAKzF,EAAMoF,YAAiB,EAASK,EAAGzE,aAAe,2BAGhF,CACE,YAAAuE,CAAavF,GACXjB,KAAKgG,OAAS/E,EACVjB,KAAKuB,SACPvB,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUR,IAEvCjB,KAAKmB,SACFnB,KAAAmB,QAAQQ,aAAaV,EAAMpC,OAEtC,CACE,sBAAA8H,CAAuBtH,GACrBW,KAAKuG,qBAAuBlH,CAChC,EAEA,MAAMuH,UAA0BjH,EAC9B,WAAAC,CAAY0D,EAAKD,EAAOzC,EAAiB2B,EAAsBC,EAAuB/B,EAAcoG,EAAQC,GACnGhH,QAEPlC,EAAcoC,KAAM,oBACpBpC,EAAcoC,KAAM,yBACpBpC,EAAcoC,KAAM,0BACpBpC,EAAcoC,KAAM,iBACpBpC,EAAcoC,KAAM,WACpBpC,EAAcoC,KAAM,UAEpBpC,EAAcoC,KAAM,UACpBpC,EAAcoC,KAAM,WACpBpC,EAAcoC,KAAM,SACpBA,KAAK+G,cAAgBtG,EACrBT,KAAKgH,iBAAmBpG,EACxBZ,KAAKiH,sBAAwB1E,EAC7BvC,KAAKkH,uBAAyB1E,EAC9BxC,KAAKmH,QAAUN,EACf7G,KAAKoH,OAASN,EACd,MAAM/F,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SACpCH,KAAAmB,QAAUC,SAASC,cAAc,UACjCrB,KAAAmB,QAAQG,aAAa,OAAQ,UAClCtB,KAAKqH,MAAQ,IAAIjE,EAAYC,EAAOC,GAC/BtD,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAK0D,UACE3C,EAAAW,YAAY1B,KAAKuB,QACnBvB,KAAAmB,QAAQO,YAAY1B,KAAKqH,OACvBtG,EAAAW,YAAY1B,KAAKmB,QAC5B,CACE,OAAAuC,GACO1D,KAAAuB,OAAOC,YAAcxB,KAAKyB,WACnC,CACE,SAAAA,GACS,MAAA,2EAGczB,KAAK+G,eAAiB,oFAKtB/G,KAAK+G,eAAiB,oDAE9B/G,KAAKoH,QAAU,4BACdpH,KAAKmH,SAAW,wHAIZnH,KAAKgH,kBAAoB,oKAMnBhH,KAAKiH,uBAAyB,uEAI9BjH,KAAKkH,wBAA0B,uRAgB3D,CACE,eAAAI,CAAgBjE,GACTrD,KAAAqH,MAAMzD,YAAYP,EAC3B,CACE,aAAAkE,CAAcjE,GACPtD,KAAAqH,MAAMxD,UAAUP,EACzB,CACE,qBAAAkE,CAAsBnE,GACpBrD,KAAKgH,iBAAmB3D,EACxBrD,KAAK0D,SACT,CACE,0BAAA+D,CAA2BpE,GACzBrD,KAAKiH,sBAAwB5D,EAC7BrD,KAAK0D,SACT,CACE,2BAAAgE,CAA4BrE,GAC1BrD,KAAKkH,uBAAyB7D,EAC9BrD,KAAK0D,SACT,EAES,SAAAiE,EAAgBpD,EAAMqB,GACP,oBAAX3G,QAA2B2I,eAAeC,IAAItD,IACxCqD,eAAAE,OAAOvD,EAAMqB,EAEhC,CCpqBO,SAASmC,EAAYC,GAC1B,MAAMC,EAAO,IACRD,GAmBE,OAhBHA,EAAQE,UACLD,EAAAC,QAAUF,EAAQE,QAAQC,KAAcC,GAuB1C,SAAyBA,GAC9B,MAAMH,EAAO,IACRG,GAGDA,EAAOC,OACTJ,EAAKI,KAAOC,KAAKC,MAAMD,KAAKE,UAAUJ,EAAOC,QAGxC,OAAAJ,CACT,CAjCiDQ,CAAgBL,MAG3DJ,EAAQK,OACVJ,EAAKI,KAAOC,KAAKC,MAAMD,KAAKE,UAAUR,EAAQK,QAG5CL,EAAQU,OACVT,EAAKS,KAAO,IAAIV,EAAQU,OAGtBV,EAAQW,cACVV,EAAKU,YAAc,IAAKX,EAAQW,cAG3BV,CACT,CAwBO,SAASW,EAAiBC,GACxB,MAAA,IACFA,EACHC,SAAUD,EAAQC,SAASX,KAAeH,GAAAD,EAAYC,KAE1D,CDknBmB,CACjB,CAAEzD,KAAM,iBAAkBwE,MAAO/H,GACjC,CAAEuD,KAAM,eAAgBwE,MAAO3F,GAC/B,CAAEmB,KAAM,eAAgBwE,MAAOjF,GAC/B,CAAES,KAAM,qBAAsBwE,MAAOhD,GACrC,CAAExB,KAAM,sBAAuBwE,MAAOnC,GACtC,CAAErC,KAAM,uBAAwBwE,MAAOhJ,IAE9BiJ,SAAQ,EAAGzE,OAAMwE,MAAOE,KAAqBtB,EAAgBpD,EAAM0E,KE5qBvE,MAAMC,UAAiCvJ,EAS5C,WAAAC,CAAYvB,GACJyB,QAPAlC,EAAAoC,KAAA,UACApC,EAAAoC,KAAA,WAAmD,IAGnDpC,EAAAoC,KAAA,UAINA,KAAKmJ,OAAS9K,EACd,MAAM0C,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAGpCH,KAAAuB,OAASH,SAASC,cAAc,SAChCrB,KAAAuB,OAAOC,YAAcxB,KAAKyB,YACxBV,EAAAW,YAAY1B,KAAKuB,QAGlB,MAAA6H,EAAOhI,SAASC,cAAc,MACpC+H,EAAK9C,UAAY,OACjBvF,EAAOW,YAAY0H,EAAI,CAIjB,SAAA3H,aAEA,MAAA2H,EAAO,OAAA3C,EAAA,SAAA,cAAK0C,OAAOxG,gBAAO0G,WAAnB,EAAAnD,EAAyBoD,WAAM,EAAA7C,EAAA2C,KAErC,MAAA,+FAIW,MAAAA,OAAA,EAAAA,EAAMxI,kBAAmB,4BAC7B,MAAAwI,OAAA,EAAAA,EAAM1K,SAAU,6CACT,MAAA0K,OAAA,EAAAA,EAAM3I,eAAgB,gCACzB,MAAA2I,OAAA,EAAAA,EAAMrI,SAAU,inBAAe,CAgCnD,UAAAwI,CAAWC,GACTxJ,KAAKyJ,SAAWD,EAChBxJ,KAAK0J,YAAW,CAGV,UAAAA,eAEN,MAAMN,EAAO,OAAAnD,EAAAjG,KAAK2J,iBAAL,EAAA1D,EAAiB2D,cAAc,WAC5C,IAAKR,EAAM,OACXA,EAAKzF,UAAY,GACX,MAAAkG,EAAY,OAAAnD,EAAA,SAAA,cAAKyC,OAAOxG,gBAAO0G,WAAnB,EAAA5C,EAAyB6C,WAAM,EAAA5C,EAAA0C,KAG3CU,EAAetK,IACnBA,EAAEqC,kBACFrC,EAAEoC,gBAAe,EAId5B,KAAAyJ,SAAST,SAASe,cACrB,MAAMnL,EAAO,IAAIgI,EAAkBmD,EAAInL,KAAK0E,IAAKyG,EAAInL,KAAKyE,MAAO,MAAAwG,OAAA,EAAAA,EAAWjJ,gBAAiB,OAAAqF,EAAW,MAAX4D,OAAW,EAAAA,EAAAP,WAAXrD,EAAAA,EAAiB1D,qBAAsB,OAAA2D,EAAW,MAAX2D,OAAW,EAAAA,EAAAP,WAAXpD,EAAAA,EAAiB1D,sBAAuB,OAAAiE,EAAW,MAAXoD,OAAW,EAAAA,EAAAP,WAAX7C,EAAAA,EAAiBhG,cAGvLuJ,EAAqBxK,IACzBsK,EAAYtK,GACZuK,EAAIjI,SAAQ,EAITlD,EAAAa,iBAAiB,QAASuK,GAG1BpL,EAAAa,iBAAiB,aAAcqK,GAC/BlL,EAAAa,iBAAiB,WAAYuK,GAG7BpL,EAAAa,iBAAiB,YAAaqK,GAG9BlL,EAAAa,iBAAiB,YAAaqK,GAC9BlL,EAAAa,iBAAiB,UAAWqK,GAEjCV,EAAK1H,YAAY9C,EAAI,GACtB,CAGH,IAAAqL,GACOjK,KAAAkK,UAAUC,IAAI,UAAS,CAG9B,IAAAC,GACOpK,KAAAkK,UAAUG,OAAO,UAAS,EAInC1C,EAAgB,+BAAgCuB,GC9HnC,MAAAoB,EAAN,MAAMA,EAAN,WAAA1K,GAEGhC,EAAAoC,KAAA,iBACApC,EAAAoC,KAAA,mBACApC,EAAAoC,KAAA,sBAAuD,IACvDpC,EAAAoC,KAAA,gBAC6BpC,EAAAoC,KAAA,qBAAA,GACEpC,EAAAoC,KAAA,uBAAA,EAAA,CAEvC,iBAAkBuK,GAIhB,OAHKD,EAAsBE,WACHF,EAAAE,SAAW,IAAIF,GAEhCA,EAAsBE,QAAA,CAG/B,eAAWC,GACT,OAAOzK,KAAK0K,cAAgB,CAAA,CAG9B,gBAAWC,GACF,OAAA3K,KAAK4K,eAAiB,CAAEC,SAAU,QAAS/B,SAAU,GAAIgC,aAAa,EAAOC,iBAAkB,KAAK,CAG7G,kBAAWC,GACF,OAAAhL,KAAKiL,iBAAmB,CAAEJ,SAAU,UAAW/B,SAAU,GAAIgC,aAAa,EAAOC,iBAAkB,KAAK,CAG1G,oBAAAG,CAAqBC,GACrBnL,KAAAoL,oBAAoBC,KAAKF,EAAQ,CAGjC,uBAAAG,CAAwBH,GAC7BnL,KAAKoL,oBAAsBpL,KAAKoL,oBAAoBtI,QAAOyI,GAAKA,IAAMJ,GAAQ,CAGhF,kBAAcK,CAAavK,2BAGzB,GAAIA,EAAMwK,YACR,OAAQxK,EAAM4J,UACZ,IAAK,QACH,GAAI7K,KAAK4K,cACP,OAAO5K,KAAK4K,cAEd,MACF,IAAK,UACH,GAAI5K,KAAKiL,gBACP,OAAOjL,KAAKiL,gBAOpB,MAAMS,EAA8B,UAAnBzK,EAAM4J,eACbc,OAAAA,EAAAA,UAAQpB,OAAOqB,aAAQ,EAAA3F,EAAAtD,MAAMkJ,qBAC7BF,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,iBAAQjJ,MAAMmJ,uBAEhC,MAAA,CACLjB,SAAU5J,EAAM4J,SAChB/B,UAAU,OAAApC,EAAA,OAAUD,EAAA,MAAAiF,OAAA,EAAAA,EAAArD,eAAMS,eAAhB,EAAApC,EAA0BqF,QAAS,GAC7CjB,aAAa,OAAAkB,EAAA,SAAA,0BAAU3D,WAAV,EAAA4D,EAAgBnD,eAAU,EAAAoD,EAAAC,mBAAUC,eAAe,EAChErB,kBAAkB,OAAAsB,EAAA,SAAA,0BAAUhE,WAAV,EAAAiE,EAAgBxD,eAAU,EAAAyD,EAAAJ,mBAAUK,cAAe,KACvE,CAGF,sBAAcC,CAAiBxL,SAE7B,GAAIA,EAAMwK,kBAAqC,IAAtBzL,KAAK0K,aAC5B,OAAO1K,KAAK0K,aAId,aAD0BiB,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,iBAAQjJ,MAAM+J,0BACjC,CAAA,CAGxB,UAAaC,CAAK1L,aAEZ,IAGF,KAAK0K,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQoD,QAC5B,MAAA,IAAIC,MAAM,yBAIlB,MAAMC,EAAa7L,GAAS,CAAE4J,SAAU,QAASY,aAAa,IAGvD5C,EAAS4B,SAAqBsC,QAAQC,IAAI,CAC/ChN,KAAKwL,aAAasB,GAClB9M,KAAKyM,iBAAiBK,KAGxB,OAAQA,EAAWjC,UACjB,IAAK,QACH7K,KAAK4K,cAAgB/B,EACrB,MACF,IAAK,UACH7I,KAAKiL,gBAAkBpC,EAK3B7I,KAAK0K,aAAeD,EAGfzK,KAAAoL,oBAAoBpC,SAAoBmC,gBAC3C,OAAAjF,GAAAD,EAAAkF,EAAS8B,QAAOC,kBAAhBhH,EAAAiH,KAAAlH,EAAkC4C,EAASiE,EAAWjC,UACtD,OAAAnE,GAAAD,EAAA0E,EAAS8B,QAAOG,sBAAhB3G,EAAAA,KAAAA,EAAsCzG,KAAK0K,cAAgB,EAAA,UAEtD2C,GACP1B,OAAAlF,EAAAkF,OAAAzF,EAAAoH,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,uBAAwBA,GAChErN,KAAAoL,oBAAoBpC,SAAoBmC,YAClC,OAAAjF,GAAAD,EAAAkF,EAAA8B,QAAOO,UAAPtH,EAAAiH,KAAAlH,EAAiBoH,EAAA,GAC3B,CACH,CAIF,sBAAaI,WACP,UAEIzN,KAAK0N,6BAGL1N,KAAK2N,sBACJN,GACP1B,OAAAzF,EAAAyF,OAAA1F,EAAAqH,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,+BAAgCA,GACxErN,KAAAoL,oBAAoBpC,SAAoBmC,YAClC,OAAAjF,GAAAD,EAAAkF,EAAA8B,QAAOO,UAAPtH,EAAAiH,KAAAlH,EAAiBoH,EAAA,GAC3B,CACH,CAIF,0BAAcK,GACZ,IAAIE,EAAmC,GAElC5N,KAAK4K,eACQgD,EAAAvC,KAAKrL,KAAK2M,KAAK,CAAE9B,SAAU,QAASY,aAAa,KAG9DzL,KAAKiL,iBACQ2C,EAAAvC,KAAKrL,KAAK2M,KAAK,CAAE9B,SAAU,UAAWY,aAAa,WAG/DsB,QAAQC,IAAIY,EAAe,CAGnC,mBAAcD,+BACZ,MAAME,EAASlC,OAAAA,EAAA2B,EAAA3B,QAAQpB,OAAOqB,iBAAQjJ,MAAMkL,OAExC,IAEF,IAAKA,EAEH,YADAlC,OAAAA,EAAAA,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,iBAAQpC,QAAQ+D,WAAQO,KAAK,sCAO9C,GAHQnC,OAAAA,EAAAA,OAAAA,EAAAA,EAAAA,QAAApB,OAAOqB,aAAPD,EAAAA,EAAenC,QAAQ+D,SAAvB5B,EAA+BmC,KAAK,oCAAqCnC,OAAAA,EAAQ2B,EAAA3B,QAAApB,OAAOqB,iBAAQpC,QAAQuE,cAG5GF,EAAOG,YAET,YADArC,OAAAA,EAAAA,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,iBAAQpC,QAAQ+D,WAAQO,KAAK,iFAKvCD,EAAAI,gBAAmBjG,IACnBhI,KAAAkO,WAAWlG,EAAS,EAAG,QAAO,EAI9B6F,EAAAM,qBAAwBC,IAEzB,IAAApG,EAOJ,OAJIoG,EAAMC,YACRrG,EAAUhI,KAAKsO,WAAW,CAAED,UAAWD,EAAMC,aAGvCD,EAAMA,OACZ,IAAK,gBACHpO,KAAKuO,gBAAgB,CAAEC,YAAY,IACnC,MACF,IAAK,OACCxG,GACFhI,KAAKyO,YAAY,CAAEzG,UAASwG,YAAY,IAE1C,MACF,IAAK,SACCxG,GACFhI,KAAK0O,cAAc,CAAE1G,UAASwG,YAAY,IAE5C,MACF,IAAK,SACCxG,GACFhI,KAAK2O,YAAY,CAAE3G,UAASwG,YAAY,IAE1C,MACF,IAAK,UACCxG,GACFhI,KAAK4O,eAAe,CAAE5G,UAASwG,YAAY,IAE7C,MACF,IAAK,eACHxO,KAAK6O,oBAAoB,CAAEL,YAAY,IACvC,MACF,IAAK,QACCxG,GACFhI,KAAK8O,aAAa,CAAE9G,UAASwG,YAAY,IAE3C,MACF,IAAK,YACCxG,GACFhI,KAAK+O,iBAAiB,CAAE/G,UAASwG,YAAY,IAI/C,QAKAX,EAAOmB,gBACPnB,EAAOoB,gBACbpB,EAAOqB,YACPvD,OAAAA,EAAAA,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,iBAAQpC,QAAQ+D,WAAQO,KAAK,uCACrCT,GACP1B,OAAAwD,EAAAxD,OAAAyD,EAAA9B,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,4BAA6BA,EAAK,CACjF,CAQM,UAAAiB,CAAWrN,WACV,OAAA,OAAAgF,EAAAjG,KAAK4K,oBAAe,EAAA3E,EAAA6C,SAASuG,MAAUC,GAAAA,EAAEjB,YAAcpN,EAAMoN,eAClE,OAAAnI,EAAKlG,KAAAiL,0BAAiBnC,SAASuG,SAAUC,EAAEjB,YAAcpN,EAAMoN,YAAS,CAQ5E,6BAAMkB,CAAwBtO,uDAE5B,OAAQA,EAAM4J,UACZ,IAAK,QAEH,GAAI7K,KAAKwP,kBACA,OAAA,KAGT,IAAI,OAAAvJ,OAAK2E,oBAAL,EAAA3E,EAAoB6E,cAAe9K,KAAK4K,cAAcG,iBACpD,IACF/K,KAAKwP,mBAAoB,EACnB,MAAA9D,QAAiBC,OAAAA,EAAA2B,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAMkJ,YAAY,CAC9D4D,gBAAiB9D,EAAAA,QAAQpB,OAAOkF,gBAChCjD,YAAaxM,KAAK4K,cAAcG,oBAE5BlC,EAAwB,CAC5BgC,SAAU,QACV/B,UAAU,OAAApC,EAAA,OAAUD,EAAA,MAAAiF,OAAA,EAAAA,EAAArD,eAAMS,eAAhB,EAAApC,EAA0BqF,QAAS,GAC7CjB,aAAa,OAAAkB,EAAA,SAAA,0BAAU3D,WAAV,EAAA4D,EAAgBnD,eAAU,EAAAoD,EAAAC,mBAAUC,eAAe,EAChErB,kBAAkB,OAAAsB,EAAA,SAAA,0BAAUhE,WAAV,EAAAiE,EAAgBxD,eAAU,EAAAyD,EAAAJ,mBAAUK,cAAe,MAGhE,OADPxM,KAAK0P,QAAQ7G,GACNA,QACAwE,GAEA,OADP1B,OAAAwD,EAAAxD,OAAAyD,EAAA9B,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,8CAA+CA,GACrF,IAAA,CACP,QACArN,KAAKwP,mBAAoB,CAAA,CAI7B,MACF,IAAK,UAEH,GAAIxP,KAAK2P,oBACA,OAAA,KAGT,IAAI,OAAAC,OAAK3E,sBAAL,EAAA2E,EAAsB9E,cAAe9K,KAAKiL,gBAAgBF,iBACxD,IACF/K,KAAK2P,qBAAsB,EACrB,MAAAjE,QAAiBC,OAAAA,EAAA2B,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAMmJ,oBAAoB,CACtE2D,gBAAiB9D,EAAAA,QAAQpB,OAAOkF,gBAChCjD,YAAaxM,KAAKiL,gBAAgBF,oBAE9BlC,EAAwB,CAC5BgC,SAAU,UACV/B,UAAU,OAAA+G,EAAA,OAAUC,EAAA,MAAApE,OAAA,EAAAA,EAAArD,eAAMS,eAAhB,EAAA+G,EAA0B9D,QAAS,GAC7CjB,aAAa,OAAAiF,EAAA,SAAA,0BAAU1H,WAAV,EAAA2H,EAAgBlH,eAAU,EAAAmH,EAAA9D,mBAAUC,eAAe,EAChErB,kBAAkB,OAAAmF,EAAA,SAAA,0BAAU7H,WAAV,EAAA8H,EAAgBrH,eAAU,EAAAsH,EAAAjE,mBAAUK,cAAe,MAGhE,OADPxM,KAAK0P,QAAQ7G,GACNA,QACAwE,GAEA,OADP1B,OAAA0E,EAAA1E,OAAA2E,EAAAhD,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,iDAAkDA,GACxF,IAAA,CACP,QACArN,KAAK2P,qBAAsB,CAAA,EAO5B,OAAA,IAAA,CAOD,SAAAY,GACC,SAAG5E,EAAAA,QAAQpB,OAAOqB,QAAU5L,KAAK4K,eAAiB5K,KAAKiL,gBAAA,CAGhE,iBAAMwD,EAAYzG,QAAEA,EAASwG,WAAAA,GAAa,cACpC,IAACxO,KAAKuQ,YACR,OAII,MAAAC,EAAoBxQ,KAAKyQ,qBAAqBzQ,KAAKyK,YAAazK,KAAK4K,cAAgB5K,KAAKiL,iBAG1FyF,EAAW1Q,KAAK2Q,mBAAmB3I,GAGrC,IAAA0I,EAAS1I,QAAQhF,KAIjB,IAGF0N,EAAS1I,QAAQhF,MAAA,IAAW4N,MAAOC,cACnC7Q,KAAK8Q,qBAAqBJ,GAGrB1Q,KAAA0K,aAAe8F,EAAkB/F,YAAc,EAG/CzK,KAAAoL,oBAAoBpC,SAAoBmC,YAClC,OAAAjF,GAAAD,EAAAkF,EAAA8B,QAAOG,sBAAPlH,EAAAiH,KAAAlH,EAA6BjG,KAAK0K,aAAA,IAGzC8D,SACI7C,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAMK,KAAK,CAAEqL,UAAWrG,EAAQqG,mBAExDhB,GACP1B,OAAAlF,EAAAkF,OAAAzF,EAAAoH,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,yBAA0BA,GACvErN,KAAK+Q,uBAAuBP,EAAiB,CAC/C,CAGF,mBAAM9B,EAAc1G,QAAEA,EAASwG,WAAAA,GAAa,cACtC,IAACxO,KAAKuQ,YACR,OAII,MAAAC,EAAoBxQ,KAAKyQ,qBAAqBzQ,KAAKyK,YAAazK,KAAK4K,cAAgB5K,KAAKiL,iBAG1FyF,EAAW1Q,KAAK2Q,mBAAmB3I,GAGrC,GAAC0I,EAAS1I,QAAQhF,KAIlB,IAGF0N,EAAS1I,QAAQhF,UAAO,EAGxBhD,KAAK8Q,qBAAqBJ,GAGrB1Q,KAAA0K,aAAe8F,EAAkB/F,YAAc,EAG/CzK,KAAAoL,oBAAoBpC,SAAoBmC,YAClC,OAAAjF,GAAAD,EAAAkF,EAAA8B,QAAOG,sBAAPlH,EAAAiH,KAAAlH,EAA6BjG,KAAK0K,aAAA,IAGzC8D,SACI7C,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAMO,OAAO,CAAEmL,UAAWrG,EAAQqG,mBAE1DhB,GACP1B,OAAAlF,EAAAkF,OAAAzF,EAAAoH,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,2BAA4BA,GACzErN,KAAK+Q,uBAAuBP,EAAiB,CAC/C,CAGF,iBAAM7B,EAAY3G,QAAEA,EAASwG,WAAAA,GAAa,cACpC,IAACxO,KAAKuQ,YACR,OAII,MAAAG,EAAW1Q,KAAK2Q,mBAAmB3I,GAEzC,SAA4B,IAAxB0I,EAASM,iBAAsD,IAA1BN,EAASO,gBAI9CP,EAAS1I,QAAQkJ,OAIjB,IACFlJ,EAAQkJ,QAAS,IAAIN,MAAOC,cAC5B7Q,KAAK8Q,qBAAqBJ,GACtBlC,SACI7C,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAMwO,KAAK,CAAE9C,UAAWrG,EAAQqG,mBAExDhB,GACPrN,KAAK8Q,qBAAqBJ,GAC1B/E,OAAAlF,EAAAkF,OAAAzF,EAAAoH,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,yBAA0BA,EAAK,CAC9E,CAGF,kBAAMyB,EAAa9G,QAAEA,EAASwG,WAAAA,GAAa,kBACrC,GAACxO,KAAKuQ,YAIN,KACE,OAAAtK,EAAQ+B,EAAAW,kBAAa,EAAA1C,EAAAmL,kBAAmB5C,SACpC7C,OAAAA,IAAQA,QAAApB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAM0O,MAAM,CACvChD,UAAWrG,EAAQqG,UACnBiD,WAAY,OAAApL,EAAQ8B,EAAAW,kBAAa,EAAAzC,EAAAkL,yBAG9B/D,GACP1B,OAAAM,EAAAN,OAAAjF,EAAA4G,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,0BAA2BA,EAAK,CAC/E,CAGF,oBAAMuB,EAAe5G,QAAEA,EAASwG,WAAAA,GAAa,gBACvC,IAACxO,KAAKuQ,YACR,OAII,MAAAgB,EAAkBvR,KAAK2Q,mBAAmB3I,GAG5C,QAA+B,IAA/BuJ,EAAgBP,WAClB,OAII,MAAAR,EAAoBxQ,KAAKyQ,qBAAqBzQ,KAAKyK,YAAazK,KAAK4K,cAAgB5K,KAAKiL,iBAE5F,IASE,GANJjD,EAAQwJ,UAAW,IAAIZ,MAAOC,cAG9B7Q,KAAKyR,cAAczJ,EAASuJ,EAAgBP,WAAY,SAGpD,OAAA/K,EAAAjG,KAAKiL,sBAAL,EAAAhF,EAAsB6C,SAAU,CAClC,MAAM4I,EAAc1R,KAAK2R,gBAAgB3J,EAAShI,KAAKiL,iBAClDjL,KAAAkO,WAAWlG,EAAS0J,EAAa,UAAS,CAI7ClD,SACI7C,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAMC,QAAQ,CAAEyL,UAAWrG,EAAQqG,mBAE3DhB,GACP1B,OAAAjF,EAAAiF,OAAAlF,EAAA6G,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,2BAA4BA,GACzErN,KAAK+Q,uBAAuBP,EAAiB,CAC/C,CAGF,sBAAMzB,EAAiB/G,QAAEA,EAASwG,WAAAA,GAAa,gBACzC,IAACxO,KAAKuQ,YACR,OAII,MAAAC,EAAoBxQ,KAAKyQ,qBAAqBzQ,KAAKyK,YAAazK,KAAK4K,cAAgB5K,KAAKiL,iBAG1FsG,EAAkBvR,KAAK2Q,mBAAmB3I,GAG5C,QAAiC,IAAjCuJ,EAAgBN,aAIhB,IASE,GANJM,EAAgBvJ,QAAQwJ,cAAW,EAGnCxR,KAAKyR,cAAczJ,EAASuJ,EAAgBN,aAAc,WAGtD,OAAAhL,EAAAjG,KAAK4K,oBAAL,EAAA3E,EAAoB6C,SAAU,CAChC,MAAM4I,EAAc1R,KAAK2R,gBAAgB3J,EAAShI,KAAK4K,eAClD5K,KAAAkO,WAAWlG,EAAS0J,EAAa,QAAO,CAI3ClD,SACI7C,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBhJ,MAAMQ,UAAU,CAAEkL,UAAWrG,EAAQqG,mBAE7DhB,GACP1B,OAAAjF,EAAAiF,OAAAlF,EAAA6G,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,6BAA8BA,GAC3ErN,KAAK+Q,uBAAuBP,EAAiB,CAC/C,CAGF,yBAAM3B,EAAoBL,WAAEA,GAAa,GAAoC,CAAA,eACvE,IAACxO,KAAKuQ,YACR,OAII,MAAAC,EAAoBxQ,KAAKyQ,qBAAqBzQ,KAAKyK,YAAazK,KAAK4K,cAAgB5K,KAAKiL,iBAE5F,IAEF,MAAM2G,GAAY,IAAIhB,MAAOC,gBAGH,OAAA5K,EAAKjG,KAAA4K,oBAAe,EAAA3E,EAAA6C,SAAShG,QAAkBkF,GAAAA,EAAQhF,SAAS,IACxEgG,SAAmBhB,cAGnCA,EAAQwJ,SAAWI,EAGb,MAAAZ,EAAa,OAAA/K,EAAAjG,KAAK4K,oBAAL3E,EAAAA,EAAoB6C,SAAS+I,WAAevC,GAAAA,EAAEjB,YAAcrG,EAAQqG,YAMnF,QALe,IAAf2C,IAA+C,IAAnBA,IAC9B,OAAA9K,EAAAlG,KAAK4K,gBAAL1E,EAAoB4C,SAASgJ,OAAOd,EAAY,IAI9C,OAAAvK,EAAAzG,KAAKiL,sBAAL,EAAAxE,EAAsBqC,SAAU,CAClC,MAAM4I,EAAc1R,KAAK2R,gBAAgB3J,EAAShI,KAAKiL,iBACvDjL,KAAKiL,gBAAgBnC,SAASgJ,OAAOJ,EAAa,EAAG1J,EAAO,KAM3DhI,KAAAoL,oBAAoBpC,SAAoBmC,gBACvCnL,KAAK4K,gBACP,OAAA1E,GAAAD,EAAAkF,EAAS8B,QAAOC,kBAAhBhH,EAAAiH,KAAAlH,EAAkCjG,KAAK4K,cAAe,UAEpD5K,KAAKiL,kBACP,OAAAvE,GAAAD,EAAA0E,EAAS8B,QAAOC,kBAAhBxG,EAAAyG,KAAA1G,EAAkCzG,KAAKiL,gBAAiB,WAAS,IAKjEuD,SACI7C,OAAAA,EAAQ2B,EAAA3B,QAAApB,OAAOqB,iBAAQjJ,MAAMM,qBAG9BoK,GACP1B,OAAAjF,EAAAiF,OAAAlF,EAAA6G,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,iCAAkCA,GAC/ErN,KAAK+Q,uBAAuBP,EAAiB,CAC/C,CAGF,wBAAMuB,EAAmBvD,WAAEA,GAAa,GAAoC,CAAA,eACtE,IAACxO,KAAKuQ,YACR,OAII,MAAAC,EAAoBxQ,KAAKyQ,qBAAqBzQ,KAAKyK,YAAazK,KAAK4K,cAAgB5K,KAAKiL,iBAE5F,IAEF,MAAM2G,GAAY,IAAIhB,MAAOC,cAGxB,OAAA5K,EAAAjG,KAAA4K,gBAAA3E,EAAe6C,SAASE,SAAmBhB,UAI1C,GAHJA,EAAQwJ,SAAWI,EAGf,OAAA3L,EAAAjG,KAAKiL,sBAAL,EAAAhF,EAAsB6C,SAAU,CAClC,MAAM4I,EAAc1R,KAAK2R,gBAAgB3J,EAAShI,KAAKiL,iBACvDjL,KAAKiL,gBAAgBnC,SAASgJ,OAAOJ,EAAa,EAAG1J,EAAO,KAMhEhI,KAAK4K,cAAgB,CACnB9B,SAAU,GACVgC,aAAa,EACbC,iBAAkB,KAClBF,SAAU,SAIZ7K,KAAK0K,aAAe,EAGf1K,KAAAoL,oBAAoBpC,SAAoBmC,oBACvCnL,KAAK4K,gBACP,OAAA1E,GAAAD,EAAAkF,EAAS8B,QAAOC,kBAAhBhH,EAAAiH,KAAAlH,EAAkCjG,KAAK4K,cAAe,UAEpD5K,KAAKiL,kBACP,OAAAvE,GAAAD,EAAA0E,EAAS8B,QAAOC,kBAAhBxG,EAAAyG,KAAA1G,EAAkCzG,KAAKiL,gBAAiB,YAEjD,OAAAiB,GAAAD,EAAAd,EAAA8B,QAAOG,sBAAPlB,EAAAiB,KAAAlB,EAA6BjM,KAAK0K,aAAA,IAIzC8D,SACI7C,OAAAA,EAAQ2B,EAAA3B,QAAApB,OAAOqB,iBAAQjJ,MAAMqP,oBAG9B3E,GACP1B,OAAAjF,EAAAiF,OAAAlF,EAAA6G,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,gCAAiCA,GAC9ErN,KAAK+Q,uBAAuBP,EAAiB,CAC/C,CAGF,qBAAMjC,EAAgBC,WAAEA,GAAa,GAAoC,CAAA,iBACnE,IAACxO,KAAKuQ,YACR,OAII,MAAAC,EAAoBxQ,KAAKyQ,qBAAqBzQ,KAAKyK,YAAazK,KAAK4K,cAAgB5K,KAAKiL,iBAE5F,IAEF,MAAM2G,GAAY,IAAIhB,MAAOC,cAGxB,OAAA5K,EAAAjG,KAAA4K,gBAAA3E,EAAe6C,SAASE,SAAmBhB,IACzCA,EAAQhF,OACXgF,EAAQhF,KAAO4O,EAAA,IAKd,OAAA1L,EAAAlG,KAAAiL,kBAAA/E,EAAiB4C,SAASE,SAAmBhB,IAC3CA,EAAQhF,OACXgF,EAAQhF,KAAO4O,EAAA,IAKnB5R,KAAK0K,aAAe,EAGf1K,KAAAoL,oBAAoBpC,SAAoBmC,oBACvCnL,KAAK4K,gBACP,OAAA1E,GAAAD,EAAAkF,EAAS8B,QAAOC,kBAAhBhH,EAAAiH,KAAAlH,EAAkCjG,KAAK4K,cAAe,UAEpD5K,KAAKiL,kBACP,OAAAvE,GAAAD,EAAA0E,EAAS8B,QAAOC,kBAAhBxG,EAAAyG,KAAA1G,EAAkCzG,KAAKiL,gBAAiB,YAEjD,OAAAiB,GAAAD,EAAAd,EAAA8B,QAAOG,sBAAPlB,EAAAiB,KAAAlB,EAA6BjM,KAAK0K,aAAA,IAGzC8D,SACI7C,OAAAA,EAAQ2B,EAAA3B,QAAApB,OAAOqB,iBAAQjJ,MAAMsP,iBAG9B5E,GACP1B,OAAAM,EAAAN,OAAAjF,EAAA4G,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,8BAA+BA,GAC5ErN,KAAK+Q,uBAAuBP,EAAiB,CAC/C,CASM,eAAAmB,CAAgBO,EAA0BrJ,GAChD,MAAMC,EAAWD,EAAQC,SAEzB,IAAA,IAASqJ,EAAI,EAAGA,EAAIrJ,EAASsJ,OAAQD,IAAK,CAClC,MAAAnK,EAAUc,EAASqJ,GACzB,GAAInK,EAAQqK,SAAWH,EAAWG,SAAWrK,EAAQqK,QAAUH,EAAWG,QACjE,OAAAF,CACT,CAGF,OAAOrJ,EAASsJ,MAAA,CAGV,OAAA1C,CAAQ7G,GACd,OAAQA,EAAQgC,UACd,IAAK,QACC7K,KAAK4K,gBACF5K,KAAA4K,cAAcE,YAAcjC,EAAQiC,YACpC9K,KAAA4K,cAAcG,iBAAmBlC,EAAQkC,iBACzC/K,KAAA4K,cAAc9B,SAAW,IAAI9I,KAAK4K,cAAc9B,YAAaD,EAAQC,WAE5E,MACF,IAAK,UACC9I,KAAKiL,kBACFjL,KAAAiL,gBAAgBH,YAAcjC,EAAQiC,YACtC9K,KAAAiL,gBAAgBF,iBAAmBlC,EAAQkC,iBAC3C/K,KAAAiL,gBAAgBnC,SAAW,IAAI9I,KAAKiL,gBAAgBnC,YAAaD,EAAQC,WAIpF9I,KAAKoL,oBAAoBpC,qBACvB,OAAA,OAAA9C,GAAAD,EAAAkF,EAAS8B,QAAOqF,kBAAc,EAAApM,EAAAiH,KAAAlH,EAAA4C,EAASA,EAAQgC,SAAA,GACjD,CAGM,UAAAqD,CAAWlG,EAAuBuK,EAAe1H,WACvD,OAAQA,GACN,IAAK,QACE7C,EAAQhF,WAA8B,IAAtBhD,KAAK0K,eACnB1K,KAAA0K,aAAe1K,KAAK0K,aAAe,GAE1C,OAAAzE,EAAAjG,KAAK4K,gBAAL3E,EAAoB6C,SAASgJ,OAAOS,EAAO,EAAGvK,GAC9C,MACF,IAAK,UACH,OAAA9B,EAAAlG,KAAKiL,kBAAL/E,EAAsB4C,SAASgJ,OAAOS,EAAO,EAAGvK,GAG/ChI,KAAAoL,oBAAoBpC,SAAoBmC,gBAC3C,OAAAjF,GAAAD,EAAAkF,EAAS8B,QAAOuF,eAAhBtM,EAAAiH,KAAAlH,EAA+B+B,EAASuK,EAAO1H,GAC/C,OAAAnE,GAAAD,EAAA0E,EAAS8B,QAAOG,sBAAsB1G,EAAAyG,KAAA1G,EAAAzG,KAAK0K,cAAgB,EAAA,GAC5D,CAGK,aAAA+G,CAAczJ,EAAuBuK,EAAe1H,WAC1D,OAAQA,GACN,IAAK,QACE7C,EAAQhF,WAA8B,IAAtBhD,KAAK0K,eACnB1K,KAAA0K,aAAe1K,KAAK0K,aAAe,GAE1C,OAAAzE,EAAAjG,KAAK4K,gBAAL3E,EAAoB6C,SAASgJ,OAAOS,EAAO,GAC3C,MACF,IAAK,UACH,OAAArM,EAAAlG,KAAKiL,kBAAL/E,EAAsB4C,SAASgJ,OAAOS,EAAO,GAG5CvS,KAAAoL,oBAAoBpC,SAAoBmC,gBAC3C,OAAAjF,GAAAD,EAAAkF,EAAS8B,QAAOwF,kBAAhBvM,EAAAiH,KAAAlH,EAAkC+B,EAASuK,EAAO1H,GAClD,OAAAnE,GAAAD,EAAA0E,EAAS8B,QAAOG,sBAAsB1G,EAAAyG,KAAA1G,EAAAzG,KAAK0K,cAAgB,EAAA,GAC5D,CAOK,oBAAAoG,CAAqBJ,QACG,IAA1BA,EAASO,cACXjR,KAAK0S,cAAchC,EAAS1I,QAAS0I,EAASO,aAAc,gBAElC,IAAxBP,EAASM,YACXhR,KAAK0S,cAAchC,EAAS1I,QAAS0I,EAASM,WAAY,QAC5D,CAGM,sBAAAD,CAAuBL,GAC7B,MAAMjG,YAAEA,EAAA9H,MAAaA,EAAOC,QAAAA,GAAY8N,EAGxC1Q,KAAK4K,cAAgBjI,EACrB3C,KAAKiL,gBAAkBrI,EAGlB5C,KAAAoL,oBAAoBpC,SAAoBmC,oBAClC,OAAAjF,GAAAD,EAAAkF,EAAA8B,QAAOC,kBAAPhH,EAAAiH,KAAAlH,EAAyBtD,EAAO,SAChC,OAAA+D,GAAAD,EAAA0E,EAAA8B,QAAOC,kBAAPxG,EAAAyG,KAAA1G,EAAyB7D,EAAS,WAClC,OAAAsJ,GAAAD,EAAAd,EAAA8B,QAAOG,sBAAsBlB,EAAAiB,KAAAlB,EAAAxB,EAAA,GACvC,CASK,aAAAiI,CAAc1K,EAAuBuK,EAAe1H,GAC1D,OAAQA,GACN,IAAK,aACuB,IAAtB7K,KAAK0K,cAA+B1C,EAAQwJ,WAC1CxJ,EAAQhF,OACVhD,KAAK0K,aAAeiI,KAAKC,IAAI,EAAG5S,KAAK0K,aAAe,IAEjD1C,EAAQhF,OACNhD,KAAA0K,aAAe1K,KAAK0K,aAAe,IAGxC1K,KAAK4K,gBACF5K,KAAA4K,cAAc9B,SAASyJ,GAASvK,GAEvC,MACF,IAAK,UACChI,KAAKiL,kBACFjL,KAAAiL,gBAAgBnC,SAASyJ,GAASvK,GAIxChI,KAAAoL,oBAAoBpC,SAAoBmC,gBAC3C,OAAAjF,GAAAD,EAAAkF,EAAS8B,QAAO4F,kBAAkB3M,EAAAiH,KAAAlH,EAAA+B,EAASuK,EAAO1H,GAClD,OAAAnE,GAAAD,EAAA0E,EAAS8B,QAAOG,sBAAsB1G,EAAAyG,KAAA1G,EAAAzG,KAAK0K,cAAgB,EAAA,GAC5D,CAQK,oBAAA+F,CAAqBhG,EAAqBE,EAA4BK,GACrE,MAAA,CACLP,cACA9H,MAAOiG,EAAiB+B,GACxB/H,QAASgG,EAAiBoC,GAC5B,CAQM,kBAAA2F,CAAmB3I,GACzB,MAAMiJ,EAAejR,KAAKiL,gBACtBjL,KAAKiL,gBAAgBnC,SAAS+I,WAAUvC,GAAKA,EAAEjB,YAAcrG,EAAQqG,iBACrE,EAEE2C,EAAahR,KAAK4K,cACpB5K,KAAK4K,cAAc9B,SAAS+I,WAAUvC,GAAKA,EAAEjB,YAAcrG,EAAQqG,iBACnE,EAEG,MAAA,CACLrG,QAASD,EAAYC,GACrBiJ,eACAD,aACF,GA71BFpT,EADW0M,EACI,YADV,IAAMwI,EAANxI,ECCA,MAAMyI,UAAwBpT,EAyBnC,WAAAC,CAAYvB,GACJyB,QAxBAlC,EAAAoC,KAAA,UACgCpC,EAAAoC,KAAA,WAAA,MACEpC,EAAAoC,KAAA,YAAA,SACbpC,EAAAoC,KAAA,aAAA,GAGrBpC,EAAAoC,KAAA,iBACApC,EAAAoC,KAAA,oBACApC,EAAAoC,KAAA,gBACApC,EAAAoC,KAAA,UACApC,EAAAoC,KAAA,SACApC,EAAAoC,KAAA,oBACApC,EAAAoC,KAAA,qBAGmCpC,EAAAoC,KAAA,oBAAA,MACXpC,EAAAoC,KAAA,gBAAA,GAGgCpC,EAAAoC,KAAA,cAAA,MACIpC,EAAAoC,KAAA,kBAAA,MACuBpC,EAAAoC,KAAA,oBAAA,MAIzFA,KAAKmJ,OAAS9K,EACd2B,KAAKgT,UAAY,iBAAkB/T,OACnC,MAAM8B,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAEnC8S,EAAmB7R,SAASC,cAAc,OAChD4R,EAAiB3M,UAAY,oBAGxBtG,KAAAkT,cAAgB9R,SAASC,cAAc,KACvCrB,KAAAkT,cAAc5R,aAAa,OAAQ,SAGnCtB,KAAAmT,iBAAmB/R,SAASC,cAAc,KAC1CrB,KAAAmT,iBAAiB7R,aAAa,OAAQ,YAGtCtB,KAAAoT,kBAAoBhS,SAASC,cAAc,OAChDrB,KAAKoT,kBAAkB9M,UAAY,oBAElB2M,EAAAvR,YAAY1B,KAAKkT,eACjBD,EAAAvR,YAAY1B,KAAKmT,kBACjBF,EAAAvR,YAAY1B,KAAKoT,mBAG7BpT,KAAAqT,aAAejS,SAASC,cAAc,KACtCrB,KAAAqT,aAAa/R,aAAa,OAAQ,QAGlCtB,KAAAsT,iBAAmBlS,SAASC,cAAc,OAC/CrB,KAAKsT,iBAAiBhN,UAAY,mBAG7BtG,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAKuT,iBAGLvT,KAAKwT,MAAQ,IAAItK,EAAyBlJ,KAAKmJ,QAC/CnJ,KAAKwT,MAAMjK,WAAWvJ,KAAKyT,mBAGpB1S,EAAA2S,OAAO1T,KAAKuB,OAAQvB,KAAKsT,iBAAkBL,EAAkBjT,KAAKqT,aAAcrT,KAAKwT,OAEtF,MAAAG,EAAqBnU,IACzBA,EAAEqC,kBACFrC,EAAEoC,gBAAe,EAGd5B,KAAAwT,MAAM/T,iBAAiB,YAAakU,GACpC3T,KAAAwT,MAAM/T,iBAAiB,cAAekU,GACtC3T,KAAAwT,MAAM/T,iBAAiB,QAASkU,GAEhC3T,KAAAP,iBAAiB,SAAUD,IAC1BQ,KAAKwT,MAAMI,SAASpU,EAAE+F,SAAmB/F,EAAEqU,eAAeC,SAAS9T,KAAKwT,SAGxExT,KAAK+T,WAAY/T,KAAKgU,aAAiBxU,EAAE+F,kBAAkBnC,GAAiBpD,KAAKiU,cAC9EjU,KAAAgU,YAAYhU,KAAK+T,SAAQ,IAIlC/T,KAAKkU,sBACLlU,KAAKmU,yBAAwB,CAGvB,mBAAAD,GAEDlU,KAAKgT,YACHhT,KAAAP,iBAAiB,cAAc,KAClCO,KAAKiU,cAAe,EACpBjU,KAAKoU,WAAU,IAEjBpU,KAAKP,iBAAiB,cAAc,IAAMO,KAAKqU,cACjD,CAGM,uBAAAF,aACA,MAAA/K,EAAO,OAAA3C,EAAA,SAAA,cAAK0C,OAAOxG,gBAAO0G,WAAnB,EAAAnD,EAAyBoD,WAAM,EAAA7C,EAAA2C,KAExC,WAACA,WAAMkL,SACT,OAGF,MAAMC,EAAYnL,EAAKmL,UAElBvU,KAAAP,iBACH,cACA,KAEOO,KAAAwU,kBAAoBvV,OAAOwV,YAAW,KACzCzU,KAAKiU,cAAe,EACpBjU,KAAKoU,YACDpU,KAAK+T,UAAY/T,KAAK0U,kBACnB1U,KAAA0U,gBAAgB1U,KAAK+T,UAEtBY,UAAUC,SACFD,UAAAC,SAAmB,MAAXL,OAAW,EAAAA,EAAAM,oBAAqB,KAItDJ,YAAW,KACTzU,KAAKqU,YACLrU,KAAKiU,cAAe,CAAA,IACR,MAAXM,OAAW,EAAAA,EAAAO,kBAAmB,IAAI,GACpC,IAAG,GAER,CAAEC,SAAS,IAGR/U,KAAAP,iBAAiB,YAAY,KAE5BO,KAAKwU,oBACAvV,OAAA+V,aAAahV,KAAKwU,mBACzBxU,KAAKwU,kBAAoB,KAAA,GAE5B,CAGH,cAAAS,CAAeC,GACblV,KAAK0U,gBAAkBQ,CAAA,CAIjB,eAAAzB,qCACA,MAAA5J,EAAY,OAAAnD,EAAA,OAAKD,EAAL,OAAKP,EAAL,OAAKD,EAAAjG,KAAAmJ,OAAOxG,YAAZ,EAAAsD,EAAmBoD,WAAM,EAAAnD,EAAAoD,WAAM,EAAA7C,EAAA2C,WAAM,EAAA1C,EAAA4C,KACvD,IAAIE,EAAkD,GAEhD,MAAA2L,EAAmC,YAAnBnV,KAAKoV,UAuCpB,OApCFD,GACH3L,EAAQ6B,KAAK,CACXgK,IAAI,OAAApJ,EAAAjM,KAAK+T,eAAL,EAAA9H,EAAejJ,MAAO,SAAW,OACrCpE,KAAM,CACJ0E,KAAK,OAAA4I,EAAKlM,KAAA+T,eAAU,EAAA7H,EAAAlJ,MAAO,OAAAgJ,EAAW,MAAAnC,OAAA,EAAAA,EAAA3G,aAAQ,EAAA8I,EAAA1I,IAAM,OAAAgJ,EAAW,MAAAzC,OAAA,EAAAA,EAAA7G,WAAM,EAAAsJ,EAAAhJ,IACrED,OAAO,OAAAkJ,EAAAvM,KAAK+T,eAAL,EAAAxH,EAAevJ,MAAO,OAAAqJ,EAAA,MAAAxC,OAAA,EAAAA,EAAW3G,aAAX,EAAAmJ,EAAmBhJ,OAAQ,OAAA+L,EAAA,MAAAvF,OAAA,EAAAA,EAAW7G,WAAX,EAAAoM,EAAiB/L,QAAS,OAEpFvB,QAAS,KACH9B,KAAK+T,WACH/T,KAAK+T,SAAS/Q,KAChB8P,EAAsBvI,OAAOmE,cAAc,CAAE1G,QAAShI,KAAK+T,WAE3DjB,EAAsBvI,OAAOkE,YAAY,CAAEzG,QAAShI,KAAK+T,WAC3D,IAMRvK,EAAQ6B,KAAK,CACXgK,GAAIF,EAAgB,YAAc,UAClCvW,KAAM,CACJ0E,IAAK6R,EAAgB,OAAAhG,EAAW,MAAAtF,OAAA,EAAAA,EAAA1G,oBAAWG,IAAM,OAAAsM,EAAA,MAAA/F,OAAA,EAAAA,EAAWjH,cAAS,EAAAgN,EAAAtM,IACrED,MAAO8R,EAAgB,OAAAG,EAAW,MAAAzL,OAAA,EAAAA,EAAA1G,oBAAWE,OAAQ,OAAAyM,EAAA,MAAAjG,OAAA,EAAAA,EAAWjH,cAAX,EAAAkN,EAAoBzM,QAAS,OAEpFvB,QAAS,KACH9B,KAAK+T,WACHoB,EACFrC,EAAsBvI,OAAOwE,iBAAiB,CAAE/G,QAAShI,KAAK+T,WAE9DjB,EAAsBvI,OAAOqE,eAAe,CAAE5G,QAAShI,KAAK+T,WAC9D,IAKCvK,CAAA,CAID,SAAA4K,aACA,MAAAhL,EAAO,OAAA3C,EAAA,SAAA,cAAK0C,OAAOxG,gBAAO0G,WAAnB,EAAAnD,EAAyBoD,WAAM,EAAA7C,EAAA2C,KAExCA,GAAQA,EAAKkL,UACftU,KAAKwT,MAAMjK,WAAWvJ,KAAKyT,mBACtBzT,KAAAwT,MAAMzP,MAAMwR,QAAU,QAC3BvV,KAAKwT,MAAMvJ,OACNjK,KAAAqT,aAAatP,MAAMa,QAAU,IACpC,CAGM,SAAAyP,aACA,MAAAjL,EAAO,OAAA3C,EAAA,SAAA,cAAK0C,OAAOxG,gBAAO0G,WAAnB,EAAAnD,EAAyBoD,WAAM,EAAA7C,EAAA2C,KAExCA,GAAQA,EAAKkL,UACftU,KAAKwT,MAAMpJ,OACNpK,KAAAwT,MAAMzP,MAAMwR,QAAU,OACtBvV,KAAAqT,aAAatP,MAAMa,QAAU,IACpC,CAGM,UAAA4Q,6BACN,MAAMC,EAAW,OAAAvP,EAAA,OAAKD,EAAAjG,KAAAmJ,OAAOxG,YAAZ,EAAAsD,EAAmBoD,WAAM,EAAAnD,EAAAoD,KAEnC,MAAA,6KAMc,MAAAmM,OAAA,EAAAA,EAAUC,UAAW,+RASlB,MAAAD,OAAA,EAAAA,EAAU7U,kBAAmB,uWAW3B,MAAA6U,OAAA,EAAAA,EAAUlT,uBAAwB,kFAIpC,MAAAkT,OAAA,EAAAA,EAAUjT,wBAAyB,qTAMjC,MAAAiT,OAAA,EAAAA,EAAU7U,kBAAmB,0NAI/B,MAAA6U,OAAA,EAAAA,EAAU7U,kBAAmB,sSAc7B,MAAA6U,OAAA,EAAAA,EAAUE,uBAAwB,wnBA6BvC,OAAAlP,EAAU,MAAAgP,OAAA,EAAAA,EAAApP,YAAO,EAAAI,EAAAmP,SAAU,mCAC7B,OAAAlP,EAAU,MAAA+O,OAAA,EAAAA,EAAApP,YAAO,EAAAK,EAAAmP,OAAQ,4BAC7B,OAAA5J,EAAU,MAAAwJ,OAAA,EAAAA,EAAApP,YAAO,EAAA4F,EAAA5I,QAAS,qGAKpB,OAAA6I,EAAU,MAAAuJ,OAAA,EAAAA,EAAAK,eAAU,EAAA5J,EAAA0J,SAAU,mCAChC,OAAA5J,EAAU,MAAAyJ,OAAA,EAAAA,EAAAK,eAAU,EAAA9J,EAAA6J,OAAQ,4BAChC,OAAAvJ,EAAU,MAAAmJ,OAAA,EAAAA,EAAAK,eAAU,EAAAxJ,EAAAjJ,QAAS,oEAIvB,OAAAkJ,EAAU,MAAAkJ,OAAA,EAAAA,EAAAM,WAAM,EAAAxJ,EAAAqJ,SAAU,mCAC5B,OAAAvJ,EAAU,MAAAoJ,OAAA,EAAAA,EAAAM,WAAM,EAAA1J,EAAAwJ,OAAQ,4BAC5B,OAAAzG,EAAU,MAAAqG,OAAA,EAAAA,EAAAM,WAAM,EAAA3G,EAAA/L,QAAS,mfAAK,CA0BrC,cAAAkQ,GACDvT,KAAAuB,OAAOC,YAAcxB,KAAKwV,YAAW,CAI5C,iBAAArR,WACQ,MAAA6R,EAAchW,KAAKiF,aAAa,WAChCgR,EAAejW,KAAKiF,aAAa,aAMvC,GAJIgR,IACFjW,KAAKoV,UAAYa,GAGfD,EACE,IACGhW,KAAA+T,SAAWzL,KAAKC,MAAMyN,GAC3BhW,KAAKkW,uBACEC,GACPxK,OAAAzF,EAAAyF,OAAA1F,EAAAqH,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,6CAA8C8I,EAAG,CAElG,CAIK,UAAAC,CAAWpO,EAAuB6C,GACvC7K,KAAK+T,SAAW/L,EAChBhI,KAAKoV,UAAYvK,EACjB7K,KAAKkW,gBAAe,CAGf,cAAAG,CAAenB,GACpBlV,KAAKgU,YAAckB,CAAA,CAGd,oBAAAoB,CAAqBpB,GAC1BlV,KAAKuW,kBAAoBrB,CAAA,CAGpB,kBAAAsB,CAAmBtB,GACxBlV,KAAK0U,gBAAkBQ,CAAA,CAIjB,cAAAgB,mBACF,IAAClW,KAAK+T,SAGR,OAFA/T,KAAKkT,cAAc1R,YAAc,QACjCxB,KAAKmT,iBAAiB3R,YAAc,IAKjCxB,KAAAkK,UAAUuM,OAAO,UAAWzW,KAAK+T,SAAS/Q,MAA2B,YAAnBhD,KAAKoV,WAE5DpV,KAAKkT,cAAc1R,YAAcxB,KAAK+T,SAAS1N,OAAS,mBACxDrG,KAAKmT,iBAAiB3R,YAAcxB,KAAK+T,SAAS2C,SAAW1W,KAAK+T,SAAS4C,MAAQ,GACnF3W,KAAKqT,aAAa7R,YH1Vf,SAAwBwG,GACzB,IAACA,EAAQqK,QAAgB,MAAA,MAEvB,MAAAuE,MAAUhG,KACViG,EAAc,IAAIjG,KAAK5I,EAAQqK,SAC/ByE,EAAgBnE,KAAKoE,OAAOH,EAAII,UAAYH,EAAYG,WAAa,KAE3E,OAAIF,EAAgB,GAAW,GAAGA,KAC9BA,EAAgB,KAAa,GAAGnE,KAAKoE,MAAMD,EAAgB,OAC3DA,EAAgB,MAAc,GAAGnE,KAAKoE,MAAMD,EAAgB,SAC5DA,EAAgB,OAAe,GAAGnE,KAAKoE,MAAMD,EAAgB,UAC7DA,EAAgB,QAAiB,GAAGnE,KAAKoE,MAAMD,EAAgB,WAC5D,GAAGnE,KAAKoE,MAAMD,EAAgB,WACvC,CG6UoCG,CAAejX,KAAK+T,UAGpD/T,KAAKwT,MAAMjK,WAAWvJ,KAAKyT,mBAGrB,MAAAyD,GAAa,OAAAjR,OAAK8N,eAAL,EAAA9N,EAAeiC,UAAWlI,KAAK+T,SAAS7L,QAAQkK,OAAS,EAC5EpS,KAAKoT,kBAAkBrP,MAAMwR,QAAU2B,EAAa,OAAS,OAEvD,MAAAC,EAAe,OAAAzQ,EAAA,SAAA,cAAKyC,OAAOxG,gBAAO0G,WAAnB,EAAA5C,EAAyB6C,WAAM,EAAA5C,EAAAwB,QAG/C,OAAAgE,EAAA,OAAAD,EAAAjM,KAAA+T,eAAU,EAAA9H,EAAA/D,UAASgE,EAAAlD,SAAkBZ,gBAGlC,MAAAgP,EAAe,IAAIpW,EAAc,CACrCyB,KAAM2F,EAAOiP,QACbnS,QAAS,YACTtE,gBAA+B,MAAduW,OAAc,EAAAA,EAAAvW,gBAC/B2B,qBAAoC,MAAd4U,OAAc,EAAAA,EAAA5U,qBACpCC,sBAAqC,MAAd2U,OAAc,EAAAA,EAAA3U,sBACrC9D,OAAsB,MAAdyY,OAAc,EAAAA,EAAAzY,OACtB+B,aAA4B,MAAd0W,OAAc,EAAAA,EAAA1W,aAC5BM,OAAsB,MAAdoW,OAAc,EAAAA,EAAApW,OACtBkB,WAAY,OAAAgE,EAAc,MAAdkR,OAAc,EAAAA,EAAAG,aAAdrR,EAAoB2P,OAChClV,SAAU,OAAAwF,EAAc,MAAdiR,OAAc,EAAAA,EAAAG,aAAdpR,EAAoB2P,KAC9B/U,WAAY,OAAA2F,EAAc,MAAd0Q,OAAc,EAAAA,EAAAG,aAAd7Q,EAAoB8Q,OAChC1W,UAAW,OAAA6F,EAAc,MAAdyQ,OAAc,EAAAA,EAAAG,aAAd5Q,EAAoBrD,MAC/BvB,QAAS,KACH9B,KAAK+T,UAAY/T,KAAKuW,mBACnBvW,KAAAuW,kBAAkBvW,KAAK+T,SAAU3L,EAAM,IAM7CpI,KAAAoT,kBAAkB1R,YAAY0V,EAAY,GAChD,EAILzP,EAAgB,0BAA2BoL,GC7bpC,MAAMyE,UAAqC7X,EAKhD,WAAAC,CAAYvB,EAA0BuG,GAC9B9E,QAHAlC,EAAAoC,KAAA,WAINA,KAAKyX,QAAUzX,KAAKkB,aAAa,CAAEf,KAAM,SAGnC,MAAA4D,EAAQ3C,SAASC,cAAc,SAC/B0C,EAAAvC,YAAcxB,KAAKyB,UAAUmD,GAC9B5E,KAAAyX,QAAQ/V,YAAYqC,GAGzB,MAAM2T,EAAW,IAAIC,EAA2BtZ,EAAO,IACjDuZ,EAAY,IAAID,EAA2BtZ,EAAO,KAClDwZ,EAAW,IAAIF,EAA2BtZ,EAAO,IAElD2B,KAAAyX,QAAQ/V,YAAYgW,GACpB1X,KAAAyX,QAAQ/V,YAAYkW,GACpB5X,KAAAyX,QAAQ/V,YAAYmW,EAAQ,CAI3B,SAAApW,CAAUmD,GACT,MAAA,iMAQQA,mBAAO,EAO1B+C,EAAgB,mCAAoC6P,GAEpD,MAAMG,UAAmChY,EAIvC,WAAAC,CAAYvB,EAA0ByZ,GAC9BhY,QAHAlC,EAAAoC,KAAA,WAINA,KAAKyX,QAAUzX,KAAKkB,aAAa,CAAEf,KAAM,SAEnC,MAAA4D,EAAQ3C,SAASC,cAAc,SACrC0C,EAAMvC,YAAcxB,KAAKyB,UAAUpD,EAAOyZ,GACrC9X,KAAAyX,QAAQ/V,YAAYqC,GAEnB,MAAAgU,EAAe3W,SAASC,cAAc,OAC5C0W,EAAazR,UAAY,gBACpBtG,KAAAyX,QAAQ/V,YAAYqW,EAAY,CAG/B,SAAAtW,CAAUpD,EAA0ByZ,+BACpC,MAAAzU,GAAQ,OAAAoD,EAAA,SAAA,SAAApI,EAAMsE,gBAAOqV,cAAb,EAAA9R,EAAsB+R,gBAAtB,EAAAxR,EAAiCyR,WAAY,OAGrDC,EAA4B,IAAjB9U,EAAM+O,OACrB,IAAI/O,EAAM,KAAKA,EAAM,KAAKA,EAAM,KAAKA,EAAM,KAAKA,EAAM,KAAKA,EAAM,KACjEA,EAGI+U,EAAIC,SAASF,EAASG,MAAM,EAAG,GAAI,IACnCC,EAAIF,SAASF,EAASG,MAAM,EAAG,GAAI,IACnCE,EAAIH,SAASF,EAASG,MAAM,EAAG,GAAI,IAEnCG,EAAmB,QAAQL,MAAMG,MAAMC,UACvCE,EAAmB,QAAQN,MAAMG,MAAMC,UAEtC,MAAA,kFAIMV,oIAMC,OAAA5L,EAAA,OAAAD,EAAA,OAAAvF,EAAArI,EAAMsE,YAAN,EAAA+D,EAAasR,cAAS,EAAA/L,EAAAgM,gBAAW,EAAA/L,EAAAyM,YAAa,oGAIpDF,qBACAC,qBACAD,uFAGiB,OAAAlM,EAAA,OAAAD,EAAA,OAAAN,EAAA3N,EAAMsE,YAAN,EAAAqJ,EAAagM,cAAS,EAAA1L,EAAA2L,gBAAW,EAAA1L,EAAAqM,WAAY,uDACjD,OAAAzJ,EAAA,OAAAC,EAAA,OAAA/C,EAAAhO,EAAMsE,YAAN,EAAA0J,EAAa2L,cAAS,EAAA5I,EAAA6I,gBAAW,EAAA9I,EAAA0J,kBAAmB,oMAAM,EAenFlR,EAAgB,gCAAiCgQ,GC9G1C,MAAMmB,UAAiCtT,EAI5C,WAAA5F,CAAYvB,GACJyB,QAHAlC,EAAAoC,KAAA,UAINA,KAAKmJ,OAAS9K,CAAA,CAGhB,cAAAwH,GACQ,MAAAwD,EAAOjI,SAASC,cAAc,OACpCgI,EAAK/C,UAAY,OAGX,MAAAvC,EAAQ3C,SAASC,cAAc,SAC/B0C,EAAAvC,YAAcxB,KAAKyB,YACzB4H,EAAK3H,YAAYqC,GAGjB,IAAA,IAASoO,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAM4F,EAAe,IAAIP,EAA6BxX,KAAKmJ,OAAQ,GAAKgJ,EAAI,IAC5E9I,EAAK3H,YAAYqW,EAAY,CAIxB,OADF/X,KAAAe,OAAOW,YAAY2H,GACjBA,CAAA,CAGD,SAAA5H,WACC,MAAA,yYAmBc,OAAAyE,EAAA,cAAKiD,OAAOxG,gBAAOqV,cAAnB,EAAA9R,EAA4BwP,UAAW,wGAAe,EAU/E/N,EAAgB,8BAA+BmR,GC1DxC,MAAMC,UAAuCpZ,EAUlD,WAAAC,CAAYqB,GACJnB,QARAlC,EAAAoC,KAAA,uBACApC,EAAAoC,KAAA,YACApC,EAAAoC,KAAA,cAGApC,EAAAoC,KAAA,uBAINA,KAAKgZ,oBAAsB/X,EAAM+X,oBACjChZ,KAAKiZ,WAAahY,EAAMgY,WAExB,MAAMlY,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAGnC4D,EAAQ3C,SAASC,cAAc,SAIrC,GAHM0C,EAAAvC,YAAcxB,KAAKyB,YACzBV,EAAOW,YAAYqC,GAEf/D,KAAKiZ,WACAlY,EAAAW,YAAY1B,KAAKiZ,gBACnB,CACC,MAAA9S,EAAY/E,SAASC,cAAc,OACzC8E,EAAUG,UAAY,qBAEtBtG,KAAKkZ,oBAAsB,IAAIJ,EAAyB7X,EAAM5C,OACzD2B,KAAAkZ,oBAAoBzT,WAAM,GACrBU,EAAAzE,YAAY1B,KAAKkZ,qBAE3BnY,EAAOW,YAAYyE,EAAS,CAI9BnG,KAAKmZ,SAAW,IAAIC,sBAAsBC,IAChCA,EAAArQ,SAASsQ,IACXA,EAAMC,gBACRvZ,KAAKgZ,qBAAoB,GAE5B,IAIEhZ,KAAAmZ,SAASK,QAAQxZ,KAAI,CAGpB,SAAAyB,GACC,MAAA,yKAAA,CAaT,oBAAAnB,GACEN,KAAKmZ,SAASM,YAAW,EAK7B9R,EAAgB,qCAAsCoR,GC7D/C,MAAMW,UAAyB/Z,EA+BpC,WAAAC,CAAYqB,GAQJnB,QApCAlC,EAAAoC,KAAA,sBAGApC,EAAAoC,KAAA,YAA4B,IACMpC,EAAAoC,KAAA,YAAA,SACrBpC,EAAAoC,KAAA,cAAA,GACUpC,EAAAoC,KAAA,SAAA,MACRpC,EAAAoC,KAAA,gBAAA,GAG4DpC,EAAAoC,KAAA,kBAAA,MAC2BpC,EAAAoC,KAAA,wBAAA,MACvBpC,EAAAoC,KAAA,sBAAA,MAC/EpC,EAAAoC,KAAA,cAGApC,EAAAoC,KAAA,wBACApC,EAAAoC,KAAA,oBACApC,EAAAoC,KAAA,0BACApC,EAAAoC,KAAA,wBACApC,EAAAoC,KAAA,sBACApC,EAAAoC,KAAA,sBAkBNA,KAAK2Z,mBAAqB1Y,EAAM2Y,aAAaC,WAAWtZ,IACtDP,KAAK8Z,cAAa,IAIpB9Z,KAAK+Z,WAAa9Y,EAAM+Y,UACxBha,KAAKia,qBAAuBhZ,EAAM+X,oBAClChZ,KAAKka,gBAAkBjZ,EAAMkZ,eAC7Bna,KAAKoa,sBAAwBnZ,EAAMoZ,qBACnCra,KAAKsa,oBAAsBrZ,EAAMsZ,mBAEjC,MAAMxZ,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAEnC4D,EAAQ3C,SAASC,cAAc,SAC/B0C,EAAAvC,YAAcxB,KAAKyB,YACzBV,EAAOW,YAAYqC,EAAK,CA9B1B,YAAW+E,GACT,OAAO9I,KAAKwa,SAAA,CAiCN,SAAA/Y,SAEN,MAAM4H,EAAO,OAAApD,EAAKjG,KAAA2Z,mBAAmBc,QAAQC,WAAW/X,YAAO,EAAAsD,EAAAoD,KAExD,MAAA,uFAIuB,MAANA,OAAM,EAAAA,EAAAzI,kBAAmBxC,EAAoB,wIAAI,CAYnE,KAAAuc,GAEC,YAAA,OAAA1U,EAAAjG,KAAK2J,iBAAL,EAAA1D,EAAiB2U,YACtB5a,KAAK2J,WAAWkR,YAAY7a,KAAK2J,WAAWiR,YAIxC,MAAA7W,EAAQ3C,SAASC,cAAc,SAC/B0C,EAAAvC,YAAcxB,KAAKyB,YACpB,OAAAyE,EAAAlG,KAAA2J,eAAYjI,YAAYqC,EAAK,CAG7B,UAAA+W,CAAWjS,GAChB7I,KAAKwa,UAAY,IAAI3R,EAAQC,UACxB9I,KAAA+a,aAAeC,QAAQnS,EAAQiC,aACpC9K,KAAKib,OAAS,KACdjb,KAAKkb,YAAa,EAClBlb,KAAKmb,QAAO,CAGP,OAAAzL,CAAQ7G,GACb7I,KAAKwa,UAAY,IAAIxa,KAAKwa,aAAc3R,EAAQC,UAC3C9I,KAAA+a,aAAeC,QAAQnS,EAAQiC,aACpC9K,KAAKib,OAAS,KACdjb,KAAKkb,YAAa,EAClBlb,KAAKmb,QAAO,CAGP,UAAAjN,CAAWlG,EAAuBuK,EAAQ,GAC/CvS,KAAKwa,UAAU1I,OAAOS,EAAO,EAAGvK,GAChChI,KAAKmb,QAAO,CAGP,aAAA1J,CAAcc,EAAQ,GACtBvS,KAAAwa,UAAU1I,OAAOS,EAAO,GAC7BvS,KAAKmb,QAAO,CAGP,aAAAzI,CAAc1K,EAAuBuK,EAAQ,GAC7CvS,KAAAwa,UAAUjI,GAASvK,EACxBhI,KAAKmb,QAAO,CAGP,WAAAC,CAAYvQ,GACjB7K,KAAKoV,UAAYvK,EACjB7K,KAAKib,OAAS,KACdjb,KAAKkb,YAAa,EAClBlb,KAAKmb,QAAO,CAGP,UAAAE,CAAWC,GAChBtb,KAAKib,OAAS,KACdjb,KAAKkb,WAAaI,EAClBtb,KAAKmb,QAAO,CAGP,QAAAI,CAASlO,GACdrN,KAAKib,OAAS5N,EACdrN,KAAKkb,YAAa,EAClBlb,KAAKwa,UAAY,GACjBxa,KAAKmb,QAAO,CAGP,gBAAAK,GACLxb,KAAKub,SAAS,IAAI1O,MAAM,qBAAoB,CAGtC,WAAA4O,GACNzb,KAAK+Z,YAAW,CAGV,aAAA2B,GACN1b,KAAK+Z,YAAW,CAGV,MAAAoB,mIACNnb,KAAK2a,QAEL,MAAMtc,GAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WAG9C,GAAI1a,KAAKib,OAAQ,CACT,MAAA5N,EAAQ,OAAApH,EAAA5H,GAAMsE,YAAO,EAAAsD,EAAAoH,MACrBsO,EAAe,IAAI5V,EAAiB,CACxCM,MAAO,CACL5D,MAAM,OAAAyD,EAAO,MAAAmH,OAAA,EAAAA,EAAAhH,YAAO,EAAAH,EAAAzD,OAAQzC,KAAKib,OAAOjT,QACxCnH,UAAW,OAAA6F,EAAA,OAAAD,EAAA,MAAA4G,OAAA,EAAAA,EAAOhH,YAAP,EAAAI,EAAc6Q,WAAM,EAAA5Q,EAAArD,MAC/BpB,WAAY,OAAAiK,EAAA,OAAAD,EAAA,MAAAoB,OAAA,EAAAA,EAAOhH,YAAP,EAAA4F,EAAcqL,WAAM,EAAApL,EAAA0J,OAChClV,SAAU,OAAA4L,EAAA,OAAAN,EAAA,MAAAqB,OAAA,EAAAA,EAAOhH,YAAP,EAAA2F,EAAcsL,WAAM,EAAAhL,EAAAuJ,KAC9B/U,WAAY,OAAAuL,EAAA,OAAAE,EAAA,MAAAc,OAAA,EAAAA,EAAOhH,YAAP,EAAAkG,EAAc+K,WAAM,EAAAjL,EAAAkL,QAElC1Y,OAAQ,CACN4D,KAAM,OAAA2M,EAAO,MAAA/B,OAAA,EAAAA,EAAAxO,aAAQ,EAAAuQ,EAAA3M,KACrB7B,gBAAiB,OAAAuO,EAAO,MAAA9B,OAAA,EAAAA,EAAAxO,aAAQ,EAAAsQ,EAAAvO,gBAChC2B,qBAAsB,OAAAqN,EAAO,MAAAvC,OAAA,EAAAA,EAAAxO,aAAQ,EAAA+Q,EAAArN,qBACrCC,sBAAuB,OAAA8S,EAAO,MAAAjI,OAAA,EAAAA,EAAAxO,aAAQ,EAAAyW,EAAA9S,sBACtC3B,UAAW,OAAAgP,EAAA,OAAAC,EAAA,MAAAzC,OAAA,EAAAA,EAAOxO,aAAP,EAAAiR,EAAewH,WAAM,EAAAzH,EAAAxM,MAChCpB,WAAY,OAAAgO,EAAA,OAAAD,EAAA,MAAA3C,OAAA,EAAAA,EAAOxO,aAAP,EAAAmR,EAAesH,WAAM,EAAArH,EAAA2F,OACjClV,SAAU,OAAAyP,EAAA,OAAAJ,EAAA,MAAA1C,OAAA,EAAAA,EAAOxO,aAAP,EAAAkR,EAAeuH,WAAM,EAAAnH,EAAA0F,KAC/B/U,WAAY,OAAAoP,EAAA,OAAAE,EAAA,MAAA/C,OAAA,EAAAA,EAAOxO,aAAP,EAAAuR,EAAekH,WAAM,EAAApH,EAAAqH,OACjCxW,OAAQ,OAAAuP,EAAO,MAAAjD,OAAA,EAAAA,EAAAxO,aAAQ,EAAAyR,EAAAvP,OACvBrC,OAAQ,OAAA2R,EAAO,MAAAhD,OAAA,EAAAA,EAAAxO,aAAQ,EAAAwR,EAAA3R,OACvB+B,aAAc,OAAAmb,EAAO,MAAAvO,OAAA,EAAAA,EAAAxO,aAAQ,EAAA+c,EAAAnb,gBAMjC,OAHakb,EAAAlW,MAAM,OAAAoW,EAAK7b,KAAA8b,yBAAqB,EAAAD,EAAA1O,KAAAnN,KAAA,CAAE6K,SAAU7K,KAAKoV,UAAW/H,MAAOrN,KAAKib,UACrFU,EAAahV,wBAAuB,IAAM3G,KAAKyb,qBAC1C,OAAAM,EAAA/b,KAAA2J,eAAYjI,YAAYia,GAC7B,CAIF,GAAI3b,KAAKkb,WAAY,CACb,MAAAc,EAAiB,IAAIlD,EAAyBza,IAGpD,OAFe2d,EAAAvW,MAAM,OAAAwW,OAAKC,2BAAL,EAAAD,EAAA9O,KAAAnN,KAA4B,CAAE6K,SAAU7K,KAAKoV,kBAC7D,OAAA+G,EAAAnc,KAAA2J,eAAYjI,YAAYsa,GAC7B,CAIE,GAA0B,IAA1Bhc,KAAKwa,UAAUpI,OAAc,CACzB,MAAAgK,EAAQ,OAAAC,EAAAhe,GAAMsE,YAAO,EAAA0Z,EAAAD,MACrBE,EAAe,IAAIvW,EAAiB,CACxCM,MAAO,CACL5D,MAAM,OAAA8Z,EAAO,MAAAH,OAAA,EAAAA,EAAA/V,gBAAO5D,OAAQ,MAAMzC,KAAKoV,yBACvCvU,UAAW,OAAA2b,EAAA,OAAAC,EAAA,MAAAL,OAAA,EAAAA,EAAO/V,YAAP,EAAAoW,EAAcnF,WAAM,EAAAkF,EAAAnZ,MAC/BpB,WAAY,OAAAya,EAAA,OAAAC,EAAA,MAAAP,OAAA,EAAAA,EAAO/V,YAAP,EAAAsW,EAAcrF,WAAM,EAAAoF,EAAA9G,OAChClV,SAAU,OAAAkc,EAAA,OAAAC,EAAA,MAAAT,OAAA,EAAAA,EAAO/V,YAAP,EAAAwW,EAAcvF,WAAM,EAAAsF,EAAA/G,KAC9B/U,WAAY,OAAAgc,EAAA,OAAAC,EAAA,MAAAX,OAAA,EAAAA,EAAO/V,YAAP,EAAA0W,EAAczF,WAAM,EAAAwF,EAAAvF,QAElC1Y,OAAQ,CACN4D,KAAM,OAAAua,EAAO,MAAAZ,OAAA,EAAAA,EAAAvd,aAAQ,EAAAme,EAAAva,KACrB7B,gBAAiB,OAAAqc,EAAO,MAAAb,OAAA,EAAAA,EAAAvd,aAAQ,EAAAoe,EAAArc,gBAChC2B,qBAAsB,OAAA2a,EAAO,MAAAd,OAAA,EAAAA,EAAAvd,aAAQ,EAAAqe,EAAA3a,qBACrCC,sBAAuB,OAAA2a,EAAO,MAAAf,OAAA,EAAAA,EAAAvd,aAAQ,EAAAse,EAAA3a,sBACtC3B,UAAW,OAAAuc,EAAA,OAAAC,EAAA,MAAAjB,OAAA,EAAAA,EAAOvd,aAAP,EAAAwe,EAAe/F,WAAM,EAAA8F,EAAA/Z,MAChCpB,WAAY,OAAAqb,EAAA,OAAAC,EAAA,MAAAnB,OAAA,EAAAA,EAAOvd,aAAP,EAAA0e,EAAejG,WAAM,EAAAgG,EAAA1H,OACjClV,SAAU,OAAA8c,EAAA,OAAAC,EAAA,MAAArB,OAAA,EAAAA,EAAOvd,aAAP,EAAA4e,EAAenG,WAAM,EAAAkG,EAAA3H,KAC/B/U,WAAY,OAAA4c,GAAA,OAAAC,EAAA,MAAAvB,OAAA,EAAAA,EAAOvd,aAAP,EAAA8e,EAAerG,WAAM,EAAAoG,GAAAnG,OACjCxW,OAAQ,OAAA6c,GAAO,MAAAxB,OAAA,EAAAA,EAAAvd,aAAQ,EAAA+e,GAAA7c,OACvBrC,OAAQ,OAAAmf,GAAO,MAAAzB,OAAA,EAAAA,EAAAvd,aAAQ,EAAAgf,GAAAnf,OACvB+B,aAAc,OAAAqd,GAAO,MAAA1B,OAAA,EAAAA,EAAAvd,aAAQ,EAAAif,GAAArd,gBAMjC,OAHa6b,EAAA7W,MAAM,OAAAsY,QAAKC,yBAAL,EAAAD,GAAA5Q,KAAAnN,KAA0B,CAAE6K,SAAU7K,KAAKoV,aAC9DkH,EAAa3V,wBAAuB,IAAM3G,KAAK0b,uBAC1C,OAAAuC,GAAAje,KAAA2J,gBAAYjI,YAAY4a,GAC7B,CAII,MAAAjT,GAAOjI,SAASC,cAAc,MAmBpC,GAlBK,OAAA6c,GAAAle,KAAA2J,gBAAYjI,YAAY2H,IAG7BrJ,KAAKwa,UAAUxR,SAAQ,CAAChB,EAASuK,KAC/B,GAAIvS,KAAKme,iBAEP,YADA9U,GAAK3H,YAAY1B,KAAKme,iBAAiB,CAAEnW,UAASuK,WAI9C,MAAAkD,EAAW,IAAI1C,EAAgB1U,IAC5BoX,EAAAW,WAAWpO,EAAShI,KAAKoV,WACzBK,EAAAY,gBAAgBrO,UAAY,OAAA,OAAA/B,EAAAjG,KAAKka,sBAALjU,EAAAA,EAAAkH,UAAuBnF,EAASuK,EAAA,IAC5DkD,EAAAa,sBAAqB,CAACtO,EAASI,WAAW,OAAA,OAAAnC,EAAAjG,KAAKoa,8BAALnU,EAAAkH,KAAAnN,KAA6BgI,EAASI,EAAQmK,EAAA,IACxFkD,EAAAe,oBAAoBxO,UAAY,OAAA,OAAA/B,EAAAjG,KAAKsa,0BAALrU,EAAAA,EAAAkH,UAA2BnF,EAASuK,EAAA,IAC7ElJ,GAAK3H,YAAY+T,EAAQ,IAIvBzV,KAAK+a,aAAc,CACf,MAAAqD,EAAiB,IAAIrF,EAA+B,CACxD1a,MAAAA,GACA4a,WAAY,OAAAoF,GAAKre,KAAAse,4CAAyB,CAAEzT,SAAU7K,KAAKoV,YAC3D4D,oBAAqB,WAAM,OAAA,OAAA/S,EAAAjG,KAAKia,2BAALhU,EAAAA,EAAAkH,UAA4BnN,KAAKoV,UAAA,IAE9D/L,GAAK3H,YAAY0c,EAAc,CACjC,CAIK,sBAAAG,CAAuBC,GAC5Bxe,KAAKkc,qBAAuBsC,EAC5Bxe,KAAKmb,QAAO,CAGP,oBAAAsD,CAAqBD,GAC1Bxe,KAAKge,mBAAqBQ,EAC1Bxe,KAAKmb,QAAO,CAGP,oBAAAuD,CAAqBF,GAC1Bxe,KAAK8b,mBAAqB0C,EAC1Bxe,KAAKmb,QAAO,CAGP,kBAAAwD,CAAmBH,GACxBxe,KAAKme,iBAAmBK,EACxBxe,KAAKmb,QAAO,CAGP,wBAAAyD,CAAyBJ,GAC9Bxe,KAAKse,uBAAyBE,EAC9Bxe,KAAKmb,QAAO,CAGP,YAAArB,GACL9Z,KAAKmb,QAAO,CAId,oBAAA7a,GACEN,KAAK2Z,mBAAmBkF,aAAY,EAKxClX,EAAgB,qBAAsB+R,GCjT/B,MAAMoF,UAAmCnf,EAgB9C,WAAAC,CAAYqB,GACJnB,QAdAlC,EAAAoC,KAAA,WACApC,EAAAoC,KAAA,eAGApC,EAAAoC,KAAA,YACApC,EAAAoC,KAAA,aACApC,EAAAoC,KAAA,UACApC,EAAAoC,KAAA,kBACApC,EAAAoC,KAAA,UAGApC,EAAAoC,KAAA,iBAKNA,KAAK+e,QAAU9d,EAAM+d,OACrBhf,KAAKif,YAAche,EAAMie,WACzBlf,KAAKmf,cAAgBle,EAAM2Y,aAE3B,MAAM7Y,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAEpCH,KAAAuB,OAASH,SAASC,cAAc,SAEhCrB,KAAAof,SAAWhe,SAASC,cAAc,OACvCrB,KAAKof,SAAS9Y,UAAY,YAErBtG,KAAAqf,UAAY,IAAIjc,EAAYpD,KAAK+e,QAAQngB,KAAK0E,KAAOZ,EAAgBC,OACrE3C,KAAAqf,UAAU/d,aAAa,OAAQ,MAE/BtB,KAAAoG,OAAShF,SAASC,cAAc,KAChCrB,KAAAoG,OAAO5E,YAAcxB,KAAK+e,QAAQtc,KAEjC,MAAA6c,EAASle,SAASC,cAAc,OACtCie,EAAOhZ,UAAY,SAEnBtG,KAAKuf,eAAiB,IAAInc,EAAYV,EAAgBG,OAEjD7C,KAAAof,SAAS1d,YAAY1B,KAAKqf,WAC1Brf,KAAAof,SAAS1d,YAAY1B,KAAKoG,QAC1BpG,KAAAof,SAAS1d,YAAY4d,GAGtBre,EAAMue,YACHxf,KAAAof,SAAS1d,YAAY1B,KAAKuf,gBAG1Bxe,EAAAW,YAAY1B,KAAKuB,QACjBR,EAAAW,YAAY1B,KAAKof,UAExBpf,KAAKuf,eAAexb,MAAMwR,QAAUvV,KAAKif,YAAc,QAAU,OAEjEjf,KAAK8Z,cAAa,CAIZ,SAAArY,2EAEApD,MAAAA,EAAQ2B,KAAKmf,cAAczE,WAE1B,MAAA,6LASiB,OAAAzO,EAAA,OAAA5N,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAsD,EAAawZ,aAAb,EAAAvZ,EAAqBwZ,YAArB,EAAAjZ,EAA4BkZ,YAA5B,EAAAjZ,EAAmC2C,WAAnC,EAAA4C,EAAyC1J,uBAAwB,yEAIjE,OAAA8J,EAAA,OAAAhO,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAuJ,EAAauT,aAAb,EAAAzT,EAAqB0T,YAArB,EAAApT,EAA4BqT,YAA5B,EAAApT,EAAmClD,WAAnC,EAAAgD,EAAyC7J,wBAAyB,wPAgBvE,OAAAqN,EAAA,OAAAxR,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAyM,EAAaqQ,aAAQ,EAAAtQ,EAAAuQ,YAAO,EAAA9P,EAAA+P,gBAAOtW,WAAnC,EAAAyG,EAAyCwH,WAAzC,EAAAzH,EAA+C+F,SAAU,qCACzD,OAAA1F,EAAA,OAAA7R,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAqN,EAAayP,aAAQ,EAAAxP,EAAAyP,YAAO,EAAA3P,EAAA4P,gBAAOtW,WAAnC,EAAA+G,EAAyCkH,WAAzC,EAAApH,EAA+CqH,SAAU,mCAC3D,OAAA0E,EAAA,OAAA5d,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAA2N,EAAamP,aAAQ,EAAApP,EAAAqP,YAAO,EAAA9D,EAAA+D,gBAAOtW,WAAnC,EAAA0S,EAAyCzE,WAAzC,EAAA2E,EAA+CpG,OAAQ,4BAC3D,OAAA8G,EAAA,OAAAte,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAwZ,EAAasD,aAAQ,EAAApD,EAAAqD,YAAO,EAAAnD,EAAAoD,gBAAOtW,WAAnC,EAAAmT,EAAyClF,WAAzC,EAAAqF,EAA+CtZ,QAAS,6GAAK,CAUrE,YAAAyW,eAGA9Z,KAAAuB,OAAOC,YAAcxB,KAAKyB,YAG/BzB,KAAKuf,eAAe3b,aAAY,OAAAqC,EAAAjG,KAAK+e,QAAQa,oBAAb,EAAA3Z,EAA4B5C,QAAS,OAChErD,KAAAuf,eAAe1b,WAAU,OAAAqC,EAAKlG,KAAA+e,QAAQa,oBAAe,EAAA1Z,EAAA5C,MAAOZ,EAAgBG,OAEjF7C,KAAKoG,OAAO5E,YAAcxB,KAAK+e,QAAQtc,MAAQ,eAC/CzC,KAAKqf,UAAUzb,aAAY,OAAA6C,EAAAzG,KAAK+e,QAAQngB,WAAb,EAAA6H,EAAmBpD,QAAS,OAClDrD,KAAAqf,UAAUxb,WAAU,OAAA6C,EAAK1G,KAAA+e,QAAQngB,WAAM,EAAA8H,EAAApD,MAAOZ,EAAgBC,MAAK,EAM5EgF,EAAgB,iCAAkCmX,GC9G3C,MAAMe,UAA+BlgB,EAiB1C,WAAAC,CAAYga,EAAwCkG,EAAkCN,EAAqBhW,EAAmCuW,GACtIjgB,QAfAlC,EAAAoC,KAAA,sBAGApC,EAAAoC,KAAA,SACyBpC,EAAAoC,KAAA,iBAAA,GACzBpC,EAAAoC,KAAA,YACApC,EAAAoC,KAAA,eACApC,EAAAoC,KAAA,eAGApC,EAAAoC,KAAA,eACApC,EAAAoC,KAAA,SACApC,EAAAoC,KAAA,UAKNA,KAAKggB,MAAQF,EACb9f,KAAKigB,YAAcT,EACnBxf,KAAKyJ,SAAWD,EAChBxJ,KAAKkgB,eAAiB,EACtBlgB,KAAKmgB,YAAcJ,EAEnB,MAAMhf,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAEpCH,KAAAogB,YAAc,IAAIxZ,EAA2B,YAATkZ,EAAqBpd,EAAgBI,OAASJ,EAAgBK,UAClG/C,KAAAwT,MAAQpS,SAASC,cAAc,OAC/BrB,KAAAwT,MAAMlN,UAAY,QAAQwZ,IAE1B9f,KAAAuB,OAASH,SAASC,cAAc,SAE9BN,EAAAW,YAAY1B,KAAKuB,QACjBR,EAAAW,YAAY1B,KAAKogB,aACjBrf,EAAAW,YAAY1B,KAAKwT,OAExBxT,KAAKogB,YAAY3gB,iBAAiB,QAASO,KAAKqgB,WAAWC,KAAKtgB,OAChEoB,SAAS3B,iBAAiB,QAASO,KAAKugB,mBAAmBD,KAAKtgB,OAGhEA,KAAK2Z,mBAAqBC,EAAaC,WAAWtZ,IAChDP,KAAK8Z,cAAa,IAIpB9Z,KAAK8Z,cAAa,CAGZ,SAAArY,iDACN,MAAMpD,EAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WAEvC,MAAA,kOAWc,OAAAhU,EAAA,OAAAD,EAAA,OAAAP,EAAA,OAAAD,EAAA5H,EAAMsE,YAAO,EAAAsD,EAAAwZ,aAAQ,EAAAvZ,EAAAwZ,YAAO,EAAAjZ,EAAAkZ,YAAO,EAAAjZ,EAAAjG,eAAgB,4BAC1D,OAAA6L,EAAA,OAAAN,EAAA,OAAAE,EAAA,OAAAD,EAAA5N,EAAMsE,YAAO,EAAAsJ,EAAAwT,aAAQ,EAAAvT,EAAAwT,YAAO,EAAA1T,EAAA2T,YAAO,EAAArT,EAAA5N,SAAU,0CACzC,OAAAyQ,EAAA,OAAAC,EAAA,OAAA/C,EAAA,OAAAE,EAAAlO,EAAMsE,YAAO,EAAA4J,EAAAkT,aAAQ,EAAApT,EAAAqT,YAAO,EAAAtQ,EAAAuQ,YAAO,EAAAxQ,EAAAvO,kBAAmB,gCACtD,OAAAiP,EAAA,OAAAC,EAAA,OAAAwF,EAAA,OAAA1F,EAAAvR,EAAMsE,YAAO,EAAAiN,EAAA6P,aAAQ,EAAAnK,EAAAoK,YAAO,EAAA5P,EAAA6P,YAAO,EAAA9P,EAAA9O,SAAU,0MAQ1C,OAAAqP,EAAA,OAAA/R,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAqN,EAAayP,aAAb,EAAAxP,EAAqByP,YAArB,EAAA3P,EAA4B4P,YAA5B,EAAAxP,EAAmC9G,WAAnC,EAAA+G,EAAyCsF,UAAW,oHAAM,CASzE,YAAAoE,mBAED9Z,KAAAuB,OAAOC,YAAcxB,KAAKyB,YAG/B,MAGM2H,EAAO,OAAAlD,EAAA,OAAA7H,EAHC2B,KAAK2Z,mBAAmBc,QAAQC,WAG3B/X,YAAN,EAAAsD,EAAawZ,aAAQ,EAAAvZ,EAAAwZ,MAC5Bc,EAA0B,YAAfxgB,KAAKggB,MAChBS,EAAeD,EAAW,OAAA/Z,EAAM,MAAA2C,OAAA,EAAAA,EAAAsX,kBAAS7hB,OAAS,OAAA6H,EAAA,MAAA0C,OAAA,EAAAA,EAAMlB,cAAS,EAAAxB,EAAA7H,OACjE8hB,EAAcH,EAAW9d,EAAgBI,OAASJ,EAAgBK,SAExE/C,KAAKogB,YAAY7Y,eAAc,OAAA0E,EAAA,MAAAwU,OAAA,EAAAA,EAAc7hB,WAAd,EAAAqN,EAAoB3I,MAAOqd,GAC1D3gB,KAAKogB,YAAY9Y,iBAAgB,OAAA4E,EAAA,MAAAuU,OAAA,EAAAA,EAAc7hB,WAAd,EAAAsN,EAAoB7I,QAAS,OAC9DrD,KAAKogB,YAAY5Y,uBAAoC,MAAdiZ,OAAc,EAAAA,EAAA7f,kBAAmB,eACxEZ,KAAKogB,YAAY3Y,4BAAyC,MAAdgZ,OAAc,EAAAA,EAAAle,uBAAwB,OAClFvC,KAAKogB,YAAY1Y,6BAA0C,MAAd+Y,OAAc,EAAAA,EAAAje,wBAAyB,OAGpFxC,KAAK4gB,kBAAiB,CAGjB,UAAArX,CAAWC,GAChBxJ,KAAKyJ,SAAWD,EAChBxJ,KAAK4gB,kBAAiB,CAGhB,gBAAAA,GACN5gB,KAAKwT,MAAM7P,UAAY,GAEvB3D,KAAKyJ,SAAST,SAAQ,CAACgW,EAAQzM,KACvB,MAAAsO,EAAW,IAAI/B,EAA2B,CAC9CE,SACAQ,WAAYxf,KAAKigB,YACjBf,WAAYlf,KAAKkgB,iBAAmB3N,EACpCqH,aAAc5Z,KAAK2Z,mBAAmBc,UAG/BoG,EAAAphB,iBAAiB,SAAS,KACjCO,KAAKkgB,eAAiB3N,EACtByM,EAAOld,QAAQkd,GACfhf,KAAK4gB,mBACL5gB,KAAK8gB,WAAU,IAGZ9gB,KAAAwT,MAAM9R,YAAYmf,EAAQ,GAChC,CAGK,UAAAR,CAAWjS,GACjBA,EAAMvM,kBACN,MAAMkf,EAAyC,UAA7B/gB,KAAKwT,MAAMzP,MAAMwR,QACnCvV,KAAKwT,MAAMzP,MAAMwR,QAAUwL,EAAY,QAAU,OAE7CA,GACF/gB,KAAKmgB,aACP,CAGM,kBAAAI,CAAmBnS,GACpBpO,KAAK4T,SAASxF,EAAM7I,SACvBvF,KAAK8gB,WACP,CAGK,SAAAA,GACA9gB,KAAAwT,MAAMzP,MAAMwR,QAAU,MAAA,CAGtB,YAAAyL,CAAahC,GACbhf,KAAAkgB,eAAiBlgB,KAAKyJ,SAASoI,cAAeoP,EAAE5L,KAAO2J,EAAO3J,KACnErV,KAAK4gB,kBAAiB,CAGxB,oBAAAtgB,GACEN,KAAK2Z,mBAAmBkF,aAAY,EAIxClX,EAAgB,4BAA6BkY,GC9KtC,MAAMqB,UAAgCvhB,EAa3C,WAAAC,CAAYqB,GACJnB,QAXAlC,EAAAoC,KAAA,sBAGApC,EAAAoC,KAAA,aACiBpC,EAAAoC,KAAA,SAAA,GAGjBpC,EAAAoC,KAAA,UACApC,EAAAoC,KAAA,UAKNA,KAAKmhB,UAAYlgB,EAAMmgB,SAGvBphB,KAAK2Z,mBAAqB1Y,EAAMogB,SAASxH,WAAWtZ,IAC7CP,KAAA8Z,aAAa9Z,KAAKmhB,UAAS,IAGlC,MAAMpgB,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAGpCH,KAAAshB,OAASlgB,SAASC,cAAc,QACrCrB,KAAKshB,OAAOhb,UAAY,eAGnBtG,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUzB,KAAKmhB,WAEvCpgB,EAAAW,YAAY1B,KAAKuB,QACjBR,EAAAW,YAAY1B,KAAKshB,OAAM,CAGxB,SAAA7f,CAAU2f,qBAEhB,MAAM/iB,EAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WAGxC6G,EAAyB,WAAbH,EACd,OAAAlb,EAAA,OAAA7H,EAAAA,EAAMshB,YAAO,EAAA1Z,EAAApH,aAAQ,EAAAqH,EAAAsb,gBACrB,OAAAvV,EAAA,SAAA,SAAA5N,EAAMsE,gBAAO8c,aAAb,EAAA/Y,EAAqBga,cAAS,EAAAzU,EAAAuV,gBAE5B5gB,EAA6B,MAAX2gB,OAAW,EAAAA,EAAA3gB,gBAC7BH,EAA0B,MAAX8gB,OAAW,EAAAA,EAAA9gB,aAKzB,MAAA,gHAMiBG,sBAVV,OAAAsL,EAAW,MAAAqV,OAAA,EAAAA,EAAAjK,WAAM,EAAApL,EAAA7I,kCAYV5C,qDAXJ,OAAAuL,EAAW,MAAAuV,OAAA,EAAAA,EAAAjK,WAAM,EAAAtL,EAAA6J,0GAaT,CAQpB,QAAA4L,CAASC,GACd1hB,KAAK2hB,OAASD,EACd1hB,KAAK4hB,aAAY,CAGZ,YAAA9H,CAAasH,GAClBphB,KAAKmhB,UAAYC,EACjBphB,KAAK4hB,aAAY,CAGX,WAAAA,GACN5hB,KAAKuB,OAAOC,YAAcxB,KAAKyB,UAAUzB,KAAKmhB,WAC1CnhB,KAAK2hB,OAAS,GAChB3hB,KAAKshB,OAAO9f,YAAcxB,KAAK2hB,OAAOrc,WACjCtF,KAAAshB,OAAOvd,MAAMwR,QAAU,SAEvBvV,KAAAshB,OAAOvd,MAAMwR,QAAU,MAC9B,CAGF,oBAAAjV,GACEN,KAAK2Z,mBAAmBkF,aAAY,EAKxClX,EAAgB,6BAA8BuZ,GC/FvC,MAAMW,UAAgCliB,EAgB3C,WAAAC,CAAYga,EAAwCoF,GAC5Clf,QAdAlC,EAAAoC,KAAA,sBAGApC,EAAAoC,KAAA,WACApC,EAAAoC,KAAA,aAGApC,EAAAoC,KAAA,iBACApC,EAAAoC,KAAA,gBACApC,EAAAoC,KAAA,gBACApC,EAAAoC,KAAA,cACApC,EAAAoC,KAAA,UAKNA,KAAK+e,QAAUC,EACf,MAAMje,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAEpCH,KAAAuB,OAASH,SAASC,cAAc,SAEhCrB,KAAA8hB,WAAa1gB,SAASC,cAAc,OACzCrB,KAAK8hB,WAAWxb,UAAY,gBAE5BtG,KAAK+hB,aAAe,IAAI3e,OAAY,EAAWpD,KAAK+e,QAAQngB,KAAK0E,KAE5DtD,KAAAkT,cAAgB9R,SAASC,cAAc,MACvCrB,KAAAgiB,aAAe,IAAId,EAAwB,CAC9CG,SAAUzH,EACVwH,SAAU,WAGPphB,KAAA8hB,WAAWpgB,YAAY1B,KAAK+hB,cAC5B/hB,KAAA8hB,WAAWpgB,YAAY1B,KAAKkT,eAC5BlT,KAAA8hB,WAAWpgB,YAAY1B,KAAKgiB,cAE1BjhB,EAAAW,YAAY1B,KAAKuB,QACjBR,EAAAW,YAAY1B,KAAK8hB,YAGxB9hB,KAAK2Z,mBAAqBC,EAAaC,WAAWtZ,IAC3CP,KAAA8Z,aAAa9Z,KAAKoV,WAAa,QAAO,IAGxCpV,KAAA8Z,aAAa9Z,KAAKoV,WAAa,QAAO,CAIrC,SAAA3T,uCAEN,MAAMpD,EAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WAEvC,MAAA,2RAeY,OAAAhU,EAAA,OAAAD,EAAA,OAAAP,EAAA,OAAAD,EAAA5H,EAAMsE,YAAO,EAAAsD,EAAAwZ,aAAQ,EAAAvZ,EAAAwa,cAAS,EAAAja,EAAA6Q,WAAM,EAAA5Q,EAAAkP,SAAU,mCAChD,OAAAtJ,EAAA,OAAAN,EAAA,OAAAE,EAAA,OAAAD,EAAA5N,EAAMsE,YAAO,EAAAsJ,EAAAwT,aAAQ,EAAAvT,EAAAwU,cAAS,EAAA1U,EAAAsL,WAAM,EAAAhL,EAAAuJ,OAAQ,kCAC1C,OAAA1G,EAAA,OAAAC,EAAA,OAAA/C,EAAA,OAAAE,EAAAlO,EAAMsE,YAAO,EAAA4J,EAAAkT,aAAQ,EAAApT,EAAAqU,cAAS,EAAAtR,EAAAkI,WAAM,EAAAnI,EAAAoI,SAAU,2BACpD,OAAA1H,EAAA,OAAAC,EAAA,OAAAwF,EAAA,OAAA1F,EAAAvR,EAAMsE,YAAO,EAAAiN,EAAA6P,aAAQ,EAAAnK,EAAAoL,cAAS,EAAA5Q,EAAAwH,WAAM,EAAAzH,EAAAxM,QAAS,iGAAK,CASzD,YAAAyW,CAAajP,GACnB7K,KAAKoV,UAAYvK,EACZ7K,KAAAuB,OAAOC,YAAcxB,KAAKyB,YAC1BzB,KAAAgiB,aAAalI,aAAa,UAC/B9Z,KAAKiiB,cAAa,CAGb,oBAAAC,CAAqBlD,EAAgCnU,EAAgCJ,GAC1FzK,KAAK+e,QAAUC,EACfhf,KAAKoV,UAAYvK,EACZ7K,KAAAgiB,aAAaP,SAAShX,GAC3BzK,KAAKiiB,cAAa,CAGZ,YAAAA,+DACN,MAAM5jB,EAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WAC9C,OAAQ1a,KAAKoV,WACX,IAAK,QACHpV,KAAKkT,cAAc1R,aAAc,OAAAkF,EAAA,OAAArI,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAsD,EAAawZ,aAAb,EAAAvZ,EAAqBwa,cAArB,EAAAja,EAA8B9D,YAA9B,EAAA+D,EAAqCjE,OAAQ,QACzEzC,KAAA+hB,aAAale,WAAU,OAAA0I,EAAA,OAAAD,EAAA,OAAAN,EAAA,OAAAE,EAAA,OAAAD,EAAA5N,EAAMsE,gBAAO8c,aAAb,EAAAvT,EAAqBwU,cAArB,EAAA1U,EAA8BrJ,YAAO,EAAA2J,EAAA1N,WAAM,EAAA2N,EAAAjJ,MAAOZ,EAAgBC,OACzF3C,KAAA+hB,aAAane,aAAY,OAAA0R,EAAA,OAAAjX,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAO,EAAA0J,EAAAoT,aAAQ,EAAArQ,EAAAsR,kBAAS/d,YAA9B,EAAAiN,EAAqChR,WAArC,EAAA0W,EAA2CjS,QAAS,OAClF,MACF,IAAK,UACHrD,KAAKkT,cAAc1R,aAAc,OAAAyO,EAAA,OAAA5R,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAmN,EAAa2P,aAAb,EAAA5P,EAAqB6Q,cAArB,EAAA1Q,EAA8BpN,cAA9B,EAAAqN,EAAuCxN,OAAQ,UAC3EzC,KAAA+hB,aAAale,WAAU,OAAAyM,EAAA,OAAAJ,EAAA,OAAAE,EAAA,OAAAD,EAAA,OAAAJ,EAAA1R,EAAMsE,gBAAO8c,aAAb,EAAAtP,EAAqBuQ,cAArB,EAAAtQ,EAA8BxN,cAAS,EAAAsN,EAAAtR,WAAM,EAAA0R,EAAAhN,MAAOZ,EAAgBE,SAC3F5C,KAAA+hB,aAAane,aAAY,OAAAqY,EAAA,OAAA5d,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAO,EAAA0N,EAAAoP,aAAQ,EAAA7D,EAAA8E,kBAAS9d,cAA9B,EAAAmZ,EAAuCnd,WAAvC,EAAAqd,EAA6C5Y,QAAS,OAExF,CAIF,oBAAA/C,GACEN,KAAK2Z,mBAAmBkF,aAAY,EAKxClX,EAAgB,6BAA8Bka,GCnHvC,MAAMM,UAA2B3c,EAsGtC,WAAA5F,CAAYqB,GACJnB,QApGAlC,EAAAoC,KAAA,sBAGkCpC,EAAAoC,KAAA,YAAA,SACXpC,EAAAoC,KAAA,eAAA,GAuFvBpC,EAAAoC,KAAA,iBACApC,EAAAoC,KAAA,eACApC,EAAAoC,KAAA,eACApC,EAAAoC,KAAA,UAGApC,EAAAoC,KAAA,qBAMNA,KAAK2Z,mBAAqB1Y,EAAM2Y,aAAaC,WAAWtZ,IACtDP,KAAK8Z,cAAa,IAIpB9Z,KAAKoiB,kBAAoBnhB,EAAMohB,gBAAA,CArGzB,gBAAAC,iFACN,MAAMjkB,EAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WACxC6H,EAAa,OAAA9b,EAAA,SAAA,SAAApI,EAAMsE,gBAAO8c,aAAb,EAAAvZ,EAAqBwZ,YAAO,EAAAjZ,EAAAia,QAExC,MAAA,CACL,CACErL,GAAI,QACJ5S,MAAM,OAAAiE,EAAA,MAAA6b,OAAA,EAAAA,EAAY5f,YAAZ,EAAA+D,EAAmBjE,OAAQ,QACjC7D,KAAM,CACJyE,OAAO,OAAA6I,EAAA,OAAYD,EAAA,MAAAsW,OAAA,EAAAA,EAAA5f,YAAO,EAAAsJ,EAAArN,eAAMyE,QAAS,MACzCC,KAAK,OAAAgJ,EAAA,OAAYN,EAAA,MAAAuW,OAAA,EAAAA,EAAA5f,gBAAO/D,WAAnB,EAAA0N,EAAyBhJ,MAAOZ,EAAgBC,OAEvDid,cAAe,CACbvc,OAAO,OAAAiS,EAAA,OAAA1F,EAAA,OAAAT,EAAA,OAAAC,EAAA,OAAA/C,EAAA,OAAAE,EAAAlO,EAAMsE,gBAAO8c,aAAb,EAAApT,EAAqBqT,YAArB,EAAAtQ,EAA4BuQ,YAAO,EAAAxQ,EAAA9F,WAAM,EAAAuG,EAAAgQ,wBAAevc,QAAS,MACxEC,KAAK,OAAA6M,EAAA,OAAA9R,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAmN,EAAa2P,aAAQ,EAAA5P,EAAA6P,YAAO,EAAA1P,EAAA2P,gBAAOtW,WAAnC,EAAA0G,EAAyC6P,oBAAzC,EAAAzP,EAAwD7M,MAAOZ,EAAgBG,OAEtFf,QAAUkd,IACHhf,KAAAwiB,0BAA0B,QAASxD,EAAM,GAGlD,CACE3J,GAAI,UACJ5S,MAAM,OAAA2N,EAAA,MAAAmS,OAAA,EAAAA,EAAY3f,cAAZ,EAAAwN,EAAqB3N,OAAQ,UACnC7D,KAAM,CACJyE,OAAO,OAAAiN,EAAA,OAAYJ,EAAA,MAAAqS,OAAA,EAAAA,EAAA3f,cAAS,EAAAsN,EAAAtR,eAAMyE,QAAS,MAC3CC,KAAK,OAAAsY,EAAA,OAAYvL,EAAA,MAAAkS,OAAA,EAAAA,EAAA3f,kBAAShE,WAArB,EAAAgd,EAA2BtY,MAAOZ,EAAgBE,SAEzDgd,cAAe,CACbvc,OAAO,OAAAkZ,EAAA,OAAAF,EAAA,OAAAF,EAAA,OAAAF,EAAA,OAAAF,EAAA,OAAAF,EAAAxd,EAAMsE,gBAAO8c,aAAb,EAAA1D,EAAqB2D,YAArB,EAAAzD,EAA4B0D,YAAO,EAAAxD,EAAA9S,WAAM,EAAAgT,EAAAuD,wBAAevc,QAAS,MACxEC,KAAK,OAAAsZ,EAAA,OAAAve,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAA8Z,EAAagD,aAAQ,EAAAjD,EAAAkD,YAAO,EAAA/C,EAAAgD,gBAAOtW,WAAnC,EAAAwT,EAAyC+C,oBAAzC,EAAAhD,EAAwDtZ,MAAOZ,EAAgBG,OAEtFf,QAAUkd,IACHhf,KAAAwiB,0BAA0B,UAAWxD,EAAM,GAGtD,CAGM,gBAAAyD,2CAEN,MACMC,EAAa,OAAAjc,EAAA,SAAA,SADLzG,KAAK2Z,mBAAmBc,QAAQC,WACrB/X,gBAAO8c,aAAb,EAAAvZ,EAAqBwZ,YAAO,EAAAjZ,EAAAyB,QAExC,MAAA,CACL,CACEmN,GAAI,cACJ5S,MAAM,OAAAiE,EAAA,MAAAgc,OAAA,EAAAA,EAAYC,kBAAZ,EAAAjc,EAAyBjE,OAAQ,mBACvC7D,KAAM,CACJyE,OAAO,OAAA6I,EAAA,OAAYD,EAAA,MAAAyW,OAAA,EAAAA,EAAAC,kBAAa,EAAA1W,EAAArN,eAAMyE,QAAS,MAC/CC,KAAK,OAAAgJ,EAAA,OAAYN,EAAA,MAAA0W,OAAA,EAAAA,EAAAC,sBAAa/jB,WAAzB,EAAA0N,EAA+BhJ,MAAOZ,EAAgBC,OAE7Did,cAAe,KACf9d,QAAUvB,IACRuS,EAAsBvI,OAAOgE,gBAAgB,CAAEC,YAAY,GAAM,GAGrE,CACE6G,GAAI,aACJ5S,MAAM,OAAA8J,EAAA,MAAAmW,OAAA,EAAAA,EAAY1Q,iBAAZ,EAAAzF,EAAwB9J,OAAQ,cACtC7D,KAAM,CACJyE,OAAO,OAAA+L,EAAA,OAAY/C,EAAA,MAAAqW,OAAA,EAAAA,EAAA1Q,iBAAY,EAAA3F,EAAAzN,eAAMyE,QAAS,MAC9CC,KAAK,OAAAsM,EAAA,OAAYT,EAAA,MAAAuT,OAAA,EAAAA,EAAA1Q,qBAAYpT,WAAxB,EAAAgR,EAA8BtM,MAAOZ,EAAgBE,SAE5Dgd,cAAe,KACf9d,QAAUvB,IACRuS,EAAsBvI,OAAOwH,mBAAmB,CAAEvD,YAAY,GAAM,GAGxE,CACE6G,GAAI,cACJ5S,MAAM,OAAA6S,EAAA,MAAAoN,OAAA,EAAAA,EAAYzf,kBAAZ,EAAAqS,EAAyB7S,OAAQ,eACvC7D,KAAM,CACJyE,OAAO,OAAAwM,EAAA,OAAYC,EAAA,MAAA4S,OAAA,EAAAA,EAAAzf,kBAAa,EAAA6M,EAAAlR,eAAMyE,QAAS,MAC/CC,KAAK,OAAA2M,EAAA,OAAYD,EAAA,MAAA0S,OAAA,EAAAA,EAAAzf,sBAAarE,WAAzB,EAAAqR,EAA+B3M,MAAOZ,EAAgBE,SAE7Dgd,cAAe,KACf9d,QAAUvB,IACRuS,EAAsBvI,OAAOsE,oBAAoB,CAAEL,YAAY,GAAM,GAG3E,CAyBF,6BAAWoU,GACF,MAAA,CAAC,OAAQ,QAAS,YAAW,CAG9B,YAAA9I,qBAEN,MAAMzb,EAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WAGxC+E,EAAS,OAAAxZ,EAAAjG,KAAKe,aAAL,EAAAkF,EAAa2D,cAAc,yBACtC6V,IACKA,EAAA1b,MAAMnD,iBAAkB,OAAA6F,EAAA,OAAAP,EAAA7H,EAAMsE,YAAO,EAAAuD,EAAAuZ,aAAQ,EAAAhZ,EAAA7F,kBAAmBxC,EAAoB,KACpFqhB,EAAA1b,MAAM8e,WAAY,OAAA5W,EAAA,OAAA5N,EAAAA,EAAMsE,YAAN,EAAA+D,EAAa+Y,aAAb,EAAAxT,EAAqBlL,SAAU,mBAAmB3C,EAAmB,QAIhG,OAAA8N,EAAAlM,KAAK8iB,cAAL5W,EAAkB3C,WAAWvJ,KAAKsiB,oBAClC,OAAAtW,EAAAhM,KAAK+iB,cAAL/W,EAAkBzC,WAAWvJ,KAAKyiB,mBAAkB,CAI9C,yBAAAD,CAA0B3X,EAAgCmU,GAChEhf,KAAKoV,UAAYvK,EACb7K,KAAKgjB,eACFhjB,KAAAgjB,cAAcd,qBAAqBlD,EAAQhf,KAAKoV,UAA8B,UAAnBpV,KAAKoV,UAAwBpV,KAAK0K,aAAe,GAEnH1K,KAAKoiB,kBAAkBvX,EAAQ,CAG1B,MAAAsQ,CAAOla,GACZjB,KAAKoV,UAAYnU,EAAM4J,SACvB7K,KAAK0K,aAAezJ,EAAMwJ,YAC1BzK,KAAKijB,qBAAoB,CAGnB,mBAAAA,WACN,MAAMjE,EAAShf,KAAKsiB,mBAAmBjT,SAAY,CAAC,QAAS,WAAWyE,SAAS/J,EAAIsL,KAAOtL,EAAIsL,KAAOrV,KAAKoV,YACxG4J,IACG,OAAA/Y,EAAAjG,KAAAgjB,gBAAe/c,EAAAic,qBAAqBlD,EAAQhf,KAAKoV,UAA8B,UAAnBpV,KAAKoV,UAAwBpV,KAAK0K,aAAe,GAC7G,OAAAxE,EAAAlG,KAAA8iB,gBAAa9B,aAAahC,GACjC,CAGF,KAAAvZ,CAAMC,SACJ5F,MAAM2F,MAAMC,GAIP1F,KAAAuB,OAASH,SAASC,cAAc,SAChCrB,KAAAuB,OAAOC,YAAcxB,KAAKyB,YAC1B,OAAAwE,EAAAjG,KAAAe,SAAQkF,EAAAvE,YAAY1B,KAAKuB,QAE9BvB,KAAK8Z,cAAa,CAIpB,cAAAjU,GAEQ,MAAAqd,EAAgBljB,KAAKsiB,mBAEtBtiB,KAAAgjB,cAAgB,IAAInB,EAAwB7hB,KAAK2Z,mBAAmBc,QAASyI,EAAc,IAC3FljB,KAAA8iB,YAAc,IAAIjD,EAAuB7f,KAAK2Z,mBAAmBc,QAAS,WAAW,EAAMyI,GAAe,WAC7G,OAAAjd,EAAAjG,KAAK+iB,cAAa9c,EAAA6a,WAAA,IAEf9gB,KAAA+iB,YAAc,IAAIlD,EAAuB7f,KAAK2Z,mBAAmBc,QAAS,WAAW,EAAOza,KAAKyiB,oBAAoB,WACxH,OAAAxc,EAAAjG,KAAK8iB,cAAa7c,EAAA6a,WAAA,IAIpB9gB,KAAK8iB,YAAY9B,aAAakC,EAAc,IAGtC,MAAA5D,EAASle,SAASC,cAAc,OACtCie,EAAOhZ,UAAY,SAGb,MAAA4B,EAAU9G,SAASC,cAAc,OACvC6G,EAAQ5B,UAAY,UACZ4B,EAAAxG,YAAY1B,KAAK8iB,aACjB5a,EAAAxG,YAAY1B,KAAK+iB,aAEnB,MAAA5c,EAAY/E,SAASC,cAAc,OAMlC,OALP8E,EAAUG,UAAY,uBACZH,EAAAzE,YAAY1B,KAAKgjB,eAC3B7c,EAAUzE,YAAY4d,GACtBnZ,EAAUzE,YAAYwG,GAEf/B,CAAA,CAGD,SAAA1E,GACC,MAAA,qPAUiBrD,EAAoB,8CACVA,EAAmB,sRAAI,CAsB3D,oBAAAkC,GACEN,KAAK2Z,mBAAmBkF,aAAY,EAIxClX,EAAgB,uBAAwBwa,GC5PjC,MAAMgB,EAGX,WAAAvjB,CAAYqN,GAFHrP,EAAAoC,KAAA,UAGPA,KAAKiN,OAASA,CAAA,CAGhB,MAAA5C,GACwByI,EAAAvI,OAAOe,wBAAwBtL,KAAI,ECmKtD,MAAMojB,EAAuC,CAClDzD,MAAO,CACL9gB,OAAQ,CACND,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBC,OAEvB/B,gBAAiB,cACjB2B,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,OAC3CojB,gBAAiB,CACflK,KAAM,CACJjU,MAAOjF,EAAoB,KAC3ByX,KAAM,OACND,YAAQ,EACR2B,YAAQ,GAEV3W,gBAAiBxC,EAAmB,KACpCqC,aAAc,SAGlBxB,OAAQ,CACN2B,gBAAiBxC,EAAoB,KACrCqC,aAAc,MACd/B,OAAQ,aAAaN,EAAmB,OACxC2C,OAAQ,qBAAqB3C,EAAmB,SAGpDuE,MAAO,CACL8c,OAAQ,CACN7e,gBAAiBxC,EAAoB,KACrC2C,OAAQ,mBAAmB3C,EAAmB,OAC9CsiB,QAAS,CACPpJ,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAERlT,MAAO,CACL/D,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBC,OAEvBF,KAAM,SAERG,QAAS,CACPhE,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBH,KAAM,WAER+e,gBAAiB,CACflK,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAERjV,gBAAiBxC,EAAmB,KACpCqC,aAAc,SAGlBif,MAAO,CACLC,MAAO,CACL/e,gBAAiBxC,EAAoB,KACrCM,OAAQ,aAAaN,EAAmB,OACxCqC,aAAc,MACdM,OAAQ,oBAAoB3C,EAAmB,OAC/CiL,KAAM,CACJ9G,qBAAsBnE,EAAmB,KACzCoE,sBAAuBpE,EAAmB,KAC1CsX,QAAS,OACT4B,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAER+J,cAAe,CACbvc,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBG,SAI3B6d,QAAS,CACP7hB,OAAQ,CACND,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBI,QAEvBlC,gBAAiB,cACjB2B,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,QAE7CuE,MAAO,CACL/D,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBC,OAEvBF,KAAM,SAERG,QAAS,CACPhE,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBH,KAAM,YAGVyF,QAAS,CACPrJ,OAAQ,CACND,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBK,UAEvBnC,gBAAiB,cACjB2B,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,QAE7CukB,YAAa,CACX/jB,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBM,MAEvBP,KAAM,YAERuP,WAAY,CACVpT,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBH,KAAM,eAERQ,YAAa,CACXrE,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBO,aAEvBR,KAAM,mBAKd4G,KAAM,CACJzI,gBAAiBxC,EAAoB,KACrCkL,KAAM,CACJ1I,gBAAiB,cACjB+U,qBAAsBvX,EAAmB,KACzCmE,qBAAsBnE,EAAmB,KACzCoE,sBAAuBpE,EAAmB,KAC1C8J,QAAS,CACPtH,gBAAiB,cACjB2B,qBAAsBnE,EAAmB,KACzCoE,sBAAuBpE,EAAmB,KAC1CM,OAAQ,aAAaN,EAAmB,OACxCqC,aAAc,MACdM,OAAQ,sCACRuW,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,SAGVxP,MAAO,CACLhD,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAERC,SAAU,CACRzS,MAAOjF,EAAmB,KAC1BwX,YAAQ,EACRC,KAAM,QAERE,KAAM,CACJ1S,MAAOjF,EAAmB,KAC1BwX,YAAQ,EACRC,KAAM,QAERH,QAAS,aAAatX,EAAmB,OACzCgL,KAAM,CACJkL,SAAS,EACT1T,gBAAiBxC,EAAoB,KACrCM,OAAQ,aAAaN,EAAmB,OACxCqC,aAAc,MACdM,OAAQ,oBAAoB3C,EAAmB,OAC/CmW,UAAW,CACTO,gBAAiB,IACjBD,kBAAmB,IAErBvL,KAAM,CACJ/G,qBAAsBnE,EAAmB,KACzCoE,sBAAuBpE,EAAmB,KAC1CqC,aAAc,MACduC,KAAM,CACJK,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBM,MAEvBE,OAAQ,CACNG,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBQ,QAEvBN,QAAS,CACPS,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBO,UAAW,CACTE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBS,eAM/B6U,QAAS,CACPC,UAAW,CACTC,SAAU9Z,EAAmB,KAC7Bua,UAAW,OACXE,gBAAiB,OACjBD,SAAU,MAEZlD,QAAS,aAAatX,EAAmB,QAE3Cge,MAAO,CACL/V,MAAO,CACLiR,KAAM,CACJzB,KAAM,OACN0B,OAAQ,MACRlU,MAAOjF,EAAoB,OAG/BS,OAAQ,CACN4D,KAAM,YAGV4K,MAAO,CACLhH,MAAO,CACLiR,KAAM,CACJzB,KAAM,OACN0B,OAAQ,MACRlU,MAAOjF,EAAoB,OAG/BS,OAAQ,CACN4D,KAAM,YAMD4gB,EAAsC,CACjD1D,MAAO,CACL9gB,OAAQ,CACND,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBC,OAEvB/B,gBAAiB,cACjB2B,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,OAC3CojB,gBAAiB,CACflK,KAAM,CACJjU,MAAOjF,EAAoB,KAC3ByX,KAAM,OACND,YAAQ,EACR2B,YAAQ,GAEV3W,gBAAiBxC,EAAmB,KACpCqC,aAAc,SAGlBxB,OAAQ,CACN2B,gBAAiBxC,EAAoB,KACrCqC,aAAc,MACd/B,OAAQ,aAAaN,EAAmB,OACxC2C,OAAQ,oBAAoB3C,EAAoB,WAGpDuE,MAAO,CACL8c,OAAQ,CACN7e,gBAAiBxC,EAAoB,KACrC2C,OAAQ,mBAAmB3C,EAAmB,OAC9CsiB,QAAS,CACPpJ,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAERlT,MAAO,CACL/D,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBC,OAEvBF,KAAM,SAERG,QAAS,CACPhE,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBH,KAAM,WAER+e,gBAAiB,CACflK,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAERjV,gBAAiBxC,EAAmB,KACpCqC,aAAc,SAGlBif,MAAO,CACLC,MAAO,CACL/e,gBAAiBxC,EAAoB,KACrCM,OAAQ,aAAaN,EAAmB,OACxCqC,aAAc,MACdM,OAAQ,oBAAoB3C,EAAoB,SAChDiL,KAAM,CACJ9G,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,OAC3CsX,QAAS,OACT4B,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAER+J,cAAe,CACbvc,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBG,SAI3B6d,QAAS,CACP7hB,OAAQ,CACND,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBI,QAEvBlC,gBAAiB,cACjB2B,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,QAE7CuE,MAAO,CACL/D,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBC,OAEvBF,KAAM,SAERG,QAAS,CACPhE,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBH,KAAM,YAGVyF,QAAS,CACPrJ,OAAQ,CACND,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBK,UAEvBnC,gBAAiB,cACjB2B,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,QAE7CukB,YAAa,CACX/jB,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBM,MAEvBP,KAAM,YAERuP,WAAY,CACVpT,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBH,KAAM,eAERQ,YAAa,CACXrE,KAAM,CACJyE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBO,aAEvBR,KAAM,mBAKd4G,KAAM,CACJzI,gBAAiBxC,EAAoB,KACrCkL,KAAM,CACJ1I,gBAAiB,cACjB+U,qBAAsBvX,EAAmB,KACzCmE,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,OAC3C8J,QAAS,CACPtH,gBAAiB,cACjB2B,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,OAC3CM,OAAQ,aAAaN,EAAmB,OACxCqC,aAAc,MACdM,OAAQ,mBAAmB3C,EAAoB,SAC/CkZ,KAAM,CACJjU,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,SAGVxP,MAAO,CACLhD,MAAOjF,EAAoB,KAC3BwX,YAAQ,EACRC,KAAM,QAERC,SAAU,CACRzS,MAAOjF,EAAmB,KAC1BwX,YAAQ,EACRC,KAAM,QAERE,KAAM,CACJ1S,MAAOjF,EAAmB,KAC1BwX,YAAQ,EACRC,KAAM,QAERH,QAAS,aAAatX,EAAmB,OACzCgL,KAAM,CACJkL,SAAS,EACT1T,gBAAiBxC,EAAoB,KACrCM,OAAQ,aAAaN,EAAmB,OACxCqC,aAAc,MACdM,OAAQ,oBAAoB3C,EAAoB,SAChDmW,UAAW,CACTO,gBAAiB,IACjBD,kBAAmB,IAErBvL,KAAM,CACJ/G,qBAAsBnE,EAAoB,OAC1CoE,sBAAuBpE,EAAoB,OAC3CqC,aAAc,MACduC,KAAM,CACJK,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBM,MAEvBE,OAAQ,CACNG,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBQ,QAEvBN,QAAS,CACPS,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBE,SAEvBO,UAAW,CACTE,MAAOjF,EAAoB,KAC3BkF,IAAKZ,EAAgBS,eAM/B6U,QAAS,CACPC,UAAW,CACTC,SAAU9Z,EAAoB,KAC9Bua,UAAW,OACXE,gBAAiB,OACjBD,SAAU,MAEZlD,QAAS,aAAatX,EAAmB,QAE3Cge,MAAO,CACL/V,MAAO,CACLiR,KAAM,CACJzB,KAAM,OACN0B,OAAQ,MACRlU,MAAOjF,EAAoB,OAG/BS,OAAQ,CACN4D,KAAM,YAGV4K,MAAO,CACLhH,MAAO,CACLiR,KAAM,CACJzB,KAAM,OACN0B,OAAQ,MACRlU,MAAOjF,EAAoB,OAG/BS,OAAQ,CACN4D,KAAM,YAOD6gB,EAAa,CAACnjB,EAAuB9B,6tBAC1C,MAAAklB,GAAwB,UAATpjB,EAAmBijB,EAAoBC,EACrD,MAAA,CACL1D,MAAO,CACL9gB,OAAQ,IACH,OAAAoH,EAAasd,GAAA5D,YAAO,EAAA1Z,EAAApH,UACpB,OAAAqH,EAAA7H,EAAMshB,YAAO,EAAAzZ,EAAArH,OAChBD,KAAM,IACD,OAAA8H,EAAA,OAAAD,EAAA8c,GAAa5D,YAAb,EAAAlZ,EAAoB5H,aAAQ,EAAA6H,EAAA9H,QAC5B,OAAAsN,EAAA,OAAA7N,EAAAA,EAAMshB,YAAN,EAAA1T,EAAapN,aAAQ,EAAAqN,EAAAtN,MAE1B4iB,gBAAiB,IACZ,OAAAlV,EAAA,OAAAN,EAAAuX,GAAa5D,YAAb,EAAA3T,EAAoBnN,aAAQ,EAAAyN,EAAAkV,mBAC5B,OAAAnV,EAAA,OAAAhO,EAAAA,EAAMshB,YAAN,EAAApT,EAAa1N,aAAQ,EAAAwN,EAAAmV,kBAG5BviB,OAAQ,IACH,OAAAmQ,EAAamU,GAAA5D,YAAO,EAAAvQ,EAAAnQ,UACpB,OAAAkQ,EAAA9Q,EAAMshB,YAAO,EAAAxQ,EAAAlQ,SAGpB0D,MAAO,CACL8c,OAAQ,IACH,OAAA7P,EAAa2T,GAAA5gB,YAAO,EAAAiN,EAAA6P,UACpB,OAAAnK,EAAAjX,EAAMsE,YAAO,EAAA2S,EAAAmK,OAChBiB,QAAS,IACJ,OAAA7Q,EAAA,OAAAC,EAAAyT,GAAa5gB,YAAb,EAAAmN,EAAoB2P,aAAQ,EAAA5P,EAAA6Q,WAC5B,OAAAzQ,EAAA,OAAA5R,EAAAA,EAAMsE,YAAN,EAAAqN,EAAayP,aAAQ,EAAAxP,EAAAyQ,QACxB/d,MAAO,IACF,OAAAyN,EAAA,OAAaD,EAAb,OAAaJ,EAAAwT,GAAA5gB,gBAAO8c,aAApB,EAAAtP,EAA4BuQ,cAAS,EAAAtQ,EAAAzN,SACrC,OAAA0N,EAAA,SAAA,SAAAhS,EAAMsE,gBAAO8c,aAAb,EAAAnP,EAAqBoQ,cAAS,EAAArQ,EAAA1N,MACjC/D,KAAM,IACD,OAAAqd,EAAA,SAAA,SAAA,YAAatZ,YAAb,EAAAiZ,EAAoB6D,aAAQ,EAAA5D,EAAA6E,cAAS,EAAA3E,EAAApZ,YAAO,EAAAsZ,EAAArd,QAC5C,OAAA6d,EAAA,OAAApe,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAwZ,EAAasD,aAAQ,EAAApD,EAAAqE,cAAS,EAAAnE,EAAA5Z,YAAO,EAAA8Z,EAAA7d,OAG5CgE,QAAS,IACJ,OAAA8Z,EAAA,OAAaC,EAAb,OAAaH,EAAA+G,GAAA5gB,gBAAO8c,aAApB,EAAA9C,EAA4B+D,cAAS,EAAAhE,EAAA9Z,WACrC,OAAAma,EAAA,SAAA,SAAA1e,EAAMsE,gBAAO8c,aAAb,EAAA7C,EAAqB8D,cAAS,EAAA3D,EAAAna,QACjChE,KAAM,IACD,OAAAse,EAAA,SAAA,SAAA,YAAava,YAAb,EAAAma,EAAoB2C,aAAQ,EAAAzC,EAAA0D,cAAS,EAAAzD,EAAAra,cAAS,EAAAsa,EAAAte,QAC9C,OAAA2e,EAAA,OAAAlf,EAAA,OAAAA,EAAA,OAAAA,EAAAA,EAAMsE,YAAN,EAAAwa,EAAasC,aAAQ,EAAApC,EAAAqD,cAAS,EAAAtD,EAAAxa,cAAS,EAAA2a,EAAA3e,OAG9C4iB,gBAAiB,IACZ,OAAAhE,EAAA,OAAaC,EAAb,OAAaH,EAAAiG,GAAA5gB,gBAAO8c,aAApB,EAAAhC,EAA4BiD,cAAS,EAAAlD,EAAAgE,mBACrC,OAAA5D,GAAA,UAAA,SAAAvf,EAAMsE,gBAAO8c,aAAb,EAAA/B,GAAqBgD,cAAS,EAAA9C,GAAA4D,kBAGrC9B,MAAO,IACF,OAAA5B,GAAA,OAAAD,GAAA0F,GAAa5gB,YAAb,EAAAkb,GAAoB4B,aAAQ,EAAA3B,GAAA4B,SAC5B,OAAAzB,GAAA,OAAA5f,GAAAA,EAAMsE,YAAN,EAAAob,GAAa0B,aAAQ,EAAAxB,GAAAyB,MACxBC,MAAO,IACF,OAAA6D,GAAA,OAAanF,GAAb,OAAaH,GAAAqF,GAAA5gB,iBAAO8c,aAApB,EAAApB,GAA4BqB,YAAO,EAAA8D,GAAA7D,SACnC,OAAA8D,GAAA,UAAA,UAAAplB,EAAMsE,iBAAO8c,aAAb,EAAAiE,GAAqBhE,YAAO,EAAA+D,GAAA9D,MAC/BtW,KAAM,IACD,OAAAsa,GAAA,UAAA,UAAA,aAAahhB,YAAb,EAAAihB,GAAoBnE,aAAQ,EAAAoE,GAAAnE,YAAO,EAAAoE,GAAAnE,YAAO,EAAAgE,GAAAta,QAC1C,OAAA0a,GAAA,OAAA1lB,GAAA,OAAAA,GAAA,OAAAA,GAAAA,EAAMsE,YAAN,EAAAqhB,GAAavE,aAAQ,EAAAwE,GAAAvE,YAAO,EAAAwE,GAAAvE,YAAO,EAAAoE,GAAA1a,KACtCiO,KAAM,IACD,OAAA6M,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAAhB,GAAA5gB,YAAO,EAAA4hB,GAAA9E,aAAQ,EAAA6E,GAAA5E,YAAO,EAAA2E,GAAA1E,YAAO,EAAAyE,GAAA/a,WAAM,EAAA8a,GAAA7M,QAChD,OAAAkN,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAvmB,EAAMsE,YAAO,EAAAiiB,GAAAnF,aAAQ,EAAAkF,GAAAjF,YAAO,EAAAgF,GAAA/E,YAAO,EAAA8E,GAAApb,WAAM,EAAAmb,GAAAlN,MAE9CsI,cAAe,IACV,OAAAiF,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAA1B,GAAA5gB,YAAO,EAAAsiB,GAAAxF,aAAQ,EAAAuF,GAAAtF,YAAO,EAAAqF,GAAApF,YAAO,EAAAmF,GAAAzb,WAAM,EAAAwb,GAAAjF,iBAChD,OAAAsF,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAjnB,EAAMsE,YAAO,EAAA2iB,GAAA7F,aAAQ,EAAA4F,GAAA3F,YAAO,EAAA0F,GAAAzF,YAAO,EAAAwF,GAAA9b,WAAM,EAAA6b,GAAAtF,iBAIlDc,QAAS,IACJ,OAAA6E,GAAA,OAAaC,GAAb,OAAaC,GAAAlC,GAAA5gB,iBAAO8c,aAApB,EAAA+F,GAA4B9F,YAAO,EAAA6F,GAAA7E,WACnC,OAAAgF,GAAA,UAAA,UAAArnB,EAAMsE,iBAAO8c,aAAb,EAAAkG,GAAqBjG,YAAO,EAAAgG,GAAAhF,QAC/B/d,MAAO,IACF,OAAAijB,GAAA,UAAA,UAAA,aAAajjB,YAAb,EAAAkjB,GAAoBpG,aAAQ,EAAAqG,GAAApG,YAAO,EAAAqG,GAAArF,cAAS,EAAAkF,GAAAjjB,SAC5C,OAAAqjB,GAAA,OAAA3nB,GAAA,OAAAA,GAAA,OAAAA,GAAAA,EAAMsE,YAAN,EAAAsjB,GAAaxG,aAAQ,EAAAyG,GAAAxG,YAAO,EAAAyG,GAAAzF,cAAS,EAAAsF,GAAArjB,MACxC/D,KAAM,IACD,OAAAwnB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAAjD,GAAA5gB,YAAO,EAAA6jB,GAAA/G,aAAQ,EAAA8G,GAAA7G,YAAO,EAAA4G,GAAA5F,cAAS,EAAA2F,GAAA1jB,YAAO,EAAAyjB,GAAAxnB,QACnD,OAAA6nB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAxoB,EAAMsE,YAAO,EAAAkkB,GAAApH,aAAQ,EAAAmH,GAAAlH,YAAO,EAAAiH,GAAAjG,cAAS,EAAAgG,GAAA/jB,YAAO,EAAA8jB,GAAA7nB,OAGnDgE,QAAS,IACJ,OAAAkkB,GAAA,UAAA,UAAA,aAAankB,YAAb,EAAAokB,GAAoBtH,aAAQ,EAAAuH,GAAAtH,YAAO,EAAAuH,GAAAvG,cAAS,EAAAoG,GAAAlkB,WAC5C,OAAAskB,GAAA,OAAA7oB,GAAA,OAAAA,GAAA,OAAAA,GAAAA,EAAMsE,YAAN,EAAAwkB,GAAa1H,aAAQ,EAAA2H,GAAA1H,YAAO,EAAA2H,GAAA3G,cAAS,EAAAwG,GAAAtkB,QACxChE,KAAM,IACD,OAAA0oB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAAnE,GAAA5gB,YAAO,EAAA+kB,GAAAjI,aAAQ,EAAAgI,GAAA/H,YAAO,EAAA8H,GAAA9G,cAAS,EAAA6G,GAAA3kB,cAAS,EAAA0kB,GAAA1oB,QACrD,OAAA+oB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA1pB,EAAMsE,YAAO,EAAAolB,GAAAtI,aAAQ,EAAAqI,GAAApI,YAAO,EAAAmI,GAAAnH,cAAS,EAAAkH,GAAAhlB,cAAS,EAAA+kB,GAAA/oB,QAIvDsJ,QAAS,IACJ,OAAA8f,GAAA,OAAaC,GAAb,OAAaC,GAAA3E,GAAA5gB,iBAAO8c,aAApB,EAAAwI,GAA4BvI,YAAO,EAAAsI,GAAA9f,WACnC,OAAAigB,GAAA,UAAA,UAAA9pB,EAAMsE,iBAAO8c,aAAb,EAAA2I,GAAqB1I,YAAO,EAAAyI,GAAAjgB,QAC/Bya,YAAa,IACR,OAAA0F,GAAA,UAAA,UAAA,aAAa1lB,YAAb,EAAA2lB,GAAoB7I,aAAQ,EAAA8I,GAAA7I,YAAO,EAAA8I,GAAAtgB,cAAS,EAAAmgB,GAAA1F,eAC5C,OAAA8F,GAAA,OAAApqB,GAAA,OAAAA,GAAA,OAAAA,GAAAA,EAAMsE,YAAN,EAAA+lB,GAAajJ,aAAQ,EAAAkJ,GAAAjJ,YAAO,EAAAkJ,GAAA1gB,cAAS,EAAAugB,GAAA9F,YACxC/jB,KAAM,IACD,OAAAiqB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAA1F,GAAA5gB,YAAO,EAAAsmB,GAAAxJ,aAAQ,EAAAuJ,GAAAtJ,YAAO,EAAAqJ,GAAA7gB,cAAS,EAAA4gB,GAAAnG,kBAAa,EAAAkG,GAAAjqB,QACzD,OAAAsqB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAjrB,EAAMsE,YAAO,EAAA2mB,GAAA7J,aAAQ,EAAA4J,GAAA3J,YAAO,EAAA0J,GAAAlhB,cAAS,EAAAihB,GAAAxG,kBAAa,EAAAuG,GAAAtqB,OAGzDoT,WAAY,IACP,OAAAuX,GAAA,UAAA,UAAA,aAAa5mB,YAAb,EAAA6mB,GAAoB/J,aAAQ,EAAAgK,GAAA/J,YAAO,EAAAgK,GAAAxhB,cAAS,EAAAqhB,GAAAvX,cAC5C,OAAA2X,GAAA,OAAAtrB,GAAA,OAAAA,GAAA,OAAAA,GAAAA,EAAMsE,YAAN,EAAAinB,GAAanK,aAAQ,EAAAoK,GAAAnK,YAAO,EAAAoK,GAAA5hB,cAAS,EAAAyhB,GAAA3X,WACxCpT,KAAM,IACD,OAAAmrB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAA5G,GAAA5gB,YAAO,EAAAwnB,GAAA1K,aAAQ,EAAAyK,GAAAxK,YAAO,EAAAuK,GAAA/hB,cAAS,EAAA8hB,GAAAhY,iBAAY,EAAA+X,GAAAnrB,QACxD,OAAAwrB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAnsB,EAAMsE,YAAO,EAAA6nB,GAAA/K,aAAQ,EAAA8K,GAAA7K,YAAO,EAAA4K,GAAApiB,cAAS,EAAAmiB,GAAArY,iBAAY,EAAAoY,GAAAxrB,OAGxDqE,YAAa,IACR,OAAAwnB,GAAA,UAAA,UAAA,aAAa9nB,YAAb,EAAA+nB,GAAoBjL,aAAQ,EAAAkL,GAAAjL,YAAO,EAAAkL,GAAA1iB,cAAS,EAAAuiB,GAAAxnB,eAC5C,OAAA4nB,GAAA,OAAAxsB,GAAA,OAAAA,GAAA,OAAAA,GAAAA,EAAMsE,YAAN,EAAAmoB,GAAarL,aAAQ,EAAAsL,GAAArL,YAAO,EAAAsL,GAAA9iB,cAAS,EAAA2iB,GAAA5nB,YACxCrE,KAAM,IACD,OAAAqsB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAA9H,GAAA5gB,YAAO,EAAA0oB,GAAA5L,aAAQ,EAAA2L,GAAA1L,YAAO,EAAAyL,GAAAjjB,cAAS,EAAAgjB,GAAAjoB,kBAAa,EAAAgoB,GAAArsB,QACzD,OAAA0sB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAArtB,EAAMsE,YAAO,EAAA+oB,GAAAjM,aAAQ,EAAAgM,GAAA/L,YAAO,EAAA8L,GAAAtjB,cAAS,EAAAqjB,GAAAtoB,kBAAa,EAAAqoB,GAAA1sB,UAM/DyK,KAAM,IACD,OAAAsiB,GAAapI,GAAA5gB,YAAO,EAAAgpB,GAAAtiB,QACpB,OAAAuiB,GAAAvtB,EAAMsE,YAAO,EAAAipB,GAAAviB,KAChBC,KAAM,IACD,OAAAuiB,GAAA,OAAAC,GAAAvI,GAAa5gB,YAAb,EAAAmpB,GAAoBziB,WAAM,EAAAwiB,GAAAviB,QAC1B,OAAAyiB,GAAA,OAAA1tB,GAAAA,EAAMsE,YAAN,EAAAqpB,GAAa3iB,WAAM,EAAA0iB,GAAAziB,KACtBF,KAAM,IACD,OAAA6iB,GAAA,OAAaC,GAAb,OAAaC,GAAA5I,GAAA5gB,iBAAO0G,WAApB,EAAA6iB,GAA0B5iB,WAAM,EAAA2iB,GAAA7iB,QAChC,OAAAgjB,GAAA,UAAA,UAAA/tB,EAAMsE,iBAAO0G,WAAb,EAAAgjB,GAAmB/iB,WAAM,EAAA8iB,GAAAhjB,KAC5BE,KAAM,IACD,OAAAgjB,GAAA,UAAA,UAAA,aAAa3pB,YAAb,EAAA4pB,GAAoBljB,WAAM,EAAAmjB,GAAAljB,WAAM,EAAAmjB,GAAArjB,WAAM,EAAAkjB,GAAAhjB,QACtC,OAAAojB,GAAA,OAAAruB,GAAA,OAAAA,GAAA,OAAAA,GAAAA,EAAMsE,YAAN,EAAAgqB,GAAatjB,WAAM,EAAAujB,GAAAtjB,WAAM,EAAAujB,GAAAzjB,WAAM,EAAAsjB,GAAApjB,KAClCtG,KAAM,IACD,OAAA8pB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAA3J,GAAA5gB,YAAO,EAAAuqB,GAAA7jB,WAAM,EAAA4jB,GAAA3jB,WAAM,EAAA0jB,GAAA5jB,WAAM,EAAA2jB,GAAAzjB,WAAM,EAAAwjB,GAAA9pB,QAC5C,OAAAmqB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAlvB,EAAMsE,YAAO,EAAA4qB,GAAAlkB,WAAM,EAAAikB,GAAAhkB,WAAM,EAAA+jB,GAAAjkB,WAAM,EAAAgkB,GAAA9jB,WAAM,EAAA6jB,GAAAnqB,MAE1CE,OAAQ,IACH,OAAAsqB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAArK,GAAA5gB,YAAO,EAAAirB,GAAAvkB,WAAM,EAAAskB,GAAArkB,WAAM,EAAAokB,GAAAtkB,WAAM,EAAAqkB,GAAAnkB,WAAM,EAAAkkB,GAAAtqB,UAC5C,OAAA2qB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA5vB,EAAMsE,YAAO,EAAAsrB,GAAA5kB,WAAM,EAAA2kB,GAAA1kB,WAAM,EAAAykB,GAAA3kB,WAAM,EAAA0kB,GAAAxkB,WAAM,EAAAukB,GAAA3qB,QAE1CN,QAAS,IACJ,OAAAsrB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAA/K,GAAA5gB,YAAO,EAAA2rB,GAAAjlB,WAAM,EAAAglB,GAAA/kB,WAAM,EAAA8kB,GAAAhlB,WAAM,EAAA+kB,GAAA7kB,WAAM,EAAA4kB,GAAAtrB,WAC5C,OAAA2rB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAtwB,EAAMsE,YAAO,EAAAgsB,GAAAtlB,WAAM,EAAAqlB,GAAAplB,WAAM,EAAAmlB,GAAArlB,WAAM,EAAAolB,GAAAllB,WAAM,EAAAilB,GAAA3rB,SAE1CO,UAAW,IACN,OAAAyrB,GAAA,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAb,OAAaC,GAAAzL,GAAA5gB,YAAO,EAAAqsB,GAAA3lB,WAAM,EAAA0lB,GAAAzlB,WAAM,EAAAwlB,GAAA1lB,WAAM,EAAAylB,GAAAvlB,WAAM,EAAAslB,GAAAzrB,aAC5C,OAAA8rB,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAAhxB,EAAMsE,YAAO,EAAA0sB,GAAAhmB,WAAM,EAAA+lB,GAAA9lB,WAAM,EAAA6lB,GAAA/lB,WAAM,EAAA8lB,GAAA5lB,WAAM,EAAA2lB,GAAA9rB,eAMlD6U,QAAS,IACJ,OAAAsX,GAAa/L,GAAA5gB,YAAO,EAAA2sB,GAAAtX,WACpB,OAAAuX,GAAAlxB,EAAMsE,YAAO,EAAA4sB,GAAAvX,SAElBoE,MAAO,IACF,OAAAoT,GAAajM,GAAA5gB,YAAO,EAAA6sB,GAAApT,SACpB,OAAAqT,GAAApxB,EAAMsE,YAAO,EAAA8sB,GAAArT,OAElB/O,MAAO,IACF,OAAAqiB,GAAanM,GAAA5gB,YAAO,EAAA+sB,GAAAriB,SACpB,OAAAsiB,GAAAtxB,EAAMsE,YAAO,EAAAgtB,GAAAtiB,QAGtB,EC1zBK,MAAMuiB,EA+BX,WAAAhwB,CAAYiwB,GA5BkCjyB,EAAAoC,KAAA,qBAAA,8BAGtCpC,EAAAoC,KAAA,UACiCpC,EAAAoC,KAAA,cAAAojB,GACDxlB,EAAAoC,KAAA,aAAAqjB,GAChCzlB,EAAAoC,KAAA,WACApC,EAAAoC,KAAA,iBAAkD,IAGlDpC,EAAAoC,KAAA,aACApC,EAAAoC,KAAA,eACApC,EAAAoC,KAAA,uBAiBNA,KAAKmJ,OAAS0mB,EACT7vB,KAAA8vB,QAAU,IAAIC,YACnB/vB,KAAKgwB,UAAY,SAGjBhwB,KAAKiwB,YAAcjxB,IACnBgB,KAAKkwB,cAAc9M,GACnBpjB,KAAKmwB,aAAa9M,GAGbrjB,KAAAE,oBAAsBd,GAA4Be,IACrDH,KAAKiwB,YAAc9vB,EACnBH,KAAKowB,aAAY,GAClB,CA5BI,aAAAF,CAAc7xB,GACnB2B,KAAKqwB,YAAchyB,EACM,UAArB2B,KAAKiwB,aACPjwB,KAAKowB,aACP,CAGK,YAAAD,CAAa9xB,GAClB2B,KAAKswB,WAAajyB,EACO,SAArB2B,KAAKiwB,aACPjwB,KAAKowB,aACP,CAuBF,sBAAW/vB,GACT,OAAOL,KAAKiwB,WAAA,CAMP,QAAAvV,GACL,OAAO1a,KAAKmJ,MAAA,CAMN,WAAAinB,GAGN,MAAMjwB,EAA0B,WAAnBH,KAAKgwB,UAAyBhwB,KAAKiwB,YAAcjwB,KAAKgwB,UAG7D3xB,EAAiB,UAAT8B,EAAmBH,KAAKqwB,YAAcrwB,KAAKswB,WAGnDC,EAAcjN,EAAWnjB,EAAM9B,GAGrC2B,KAAKwwB,SAASD,EAAW,CAMnB,QAAAC,CAASnyB,GACXA,IAAU2B,KAAKmJ,SACnBnJ,KAAKmJ,OAAS9K,EACd2B,KAAK8vB,QAAQW,cAAc,IAAIC,YAAY1wB,KAAK2wB,mBAAoB,CAClEC,OAAQ,CAAEvyB,MAAAA,MACV,CAMG,OAAAwyB,CAAQ1wB,GACbH,KAAKgwB,UAAY7vB,EACjBH,KAAKowB,aAAY,CAQnB,SAAAvW,CAAUxa,GACF,MAAAyxB,EAAa,IAAIC,gBACvB/wB,KAAK8vB,QAAQrwB,iBAAiBO,KAAK2wB,oBAAsBnxB,IAC7CH,EAAAG,EAAgDoxB,OAAOvyB,MAAK,GACnD,CAAE2yB,OAAQF,EAAWE,SAE1C,MAAMC,EAA8C,CAClDxW,QAASza,KACT6e,YAAa,KACXiS,EAAWI,QACX,MAAM3e,EAAQvS,KAAKmxB,eAAeC,QAAQH,GACtC1e,GAAY,GACTvS,KAAAmxB,eAAerf,OAAOS,EAAO,EAAC,GAMlC,OADFvS,KAAAmxB,eAAe9lB,KAAK4lB,GAClBA,CAAA,CAMF,OAAAI,GACDrxB,KAAKE,qBACPF,KAAKE,sBAEPF,KAAKmxB,eAAenoB,SAAwBioB,GAAAA,EAAapS,gBACzD7e,KAAKmxB,eAAiB,EAAC,ECjIpB,MAAMG,UAAqB3xB,EA+ChC,WAAAC,CAAYga,SACJ9Z,QA7CqClC,EAAAoC,KAAA,eAAA,SAGrCpC,EAAAoC,KAAA,iBAcApC,EAAAoC,KAAA,WACApC,EAAAoC,KAAA,SACApC,EAAAoC,KAAA,sBACApC,EAAAoC,KAAA,iBACApC,EAAAoC,KAAA,UAGApC,EAAAoC,KAAA,WACApC,EAAAoC,KAAA,kBAGApC,EAAAoC,KAAA,mBACApC,EAAAoC,KAAA,yBACApC,EAAAoC,KAAA,uBAGgBpC,EAAAoC,KAAA,gBAAA,CACtBqG,MAAO,QACPzH,KAAM8D,EAAgBC,MACtBkI,SAAU7K,KAAKuxB,aACf1qB,OAAQ,UAWR7G,KAAKyX,QAAUzX,KAAKkB,aAAa,CAAEf,KAAM,SAGzCH,KAAKmf,cAAgBvF,GAAgB,IAAIgW,EAAyBxM,GAG7DpjB,KAAAwxB,QAAU,IAAIrP,EAAmB,CACpCvI,aAAc5Z,KAAKmf,cACnBkD,iBAAmBxX,IACjB7K,KAAKob,YAAYvQ,EAAQ,IAGxB7K,KAAAwxB,QAAQ/rB,WAAM,GACdzF,KAAAyX,QAAQ/V,YAAY1B,KAAKwxB,SAGzBxxB,KAAAyxB,MAAQ,IAAI/X,EAAiB,CAChCE,aAAc5Z,KAAKmf,cACnBnF,UAAW,KACTha,KAAK0D,SAAQ,EAEfsV,oBAAqB0Y,MAAO7mB,YACtB,UACIiI,EAAsBvI,OAAOgF,wBAAwB,CACzD1E,mBAEKwC,GACP1B,OAAAA,EAAAA,OAAAA,EAAAA,EAAAA,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAAQrH,EAAAmH,MAAM,yCAA0CA,EAAK,GAGhG8M,eAAgB,CAACnS,EAASuK,WACxBO,EAAsBvI,OAAOuE,aAAa,CAAE9G,YAEvChI,KAAAywB,cAAc,IAAIC,YAAY,gBAAiB,CAClDE,OAAQ,CAAE5oB,UAASuK,SACnBof,SAAS,EACTC,UAAU,KAGZ,OAAA3rB,EAAAjG,KAAKka,kBAALjU,EAAAkH,KAAuBnN,KAAA,CAAEgI,UAASuK,SAAA,EAEpC8H,qBAAsB,CAACrS,EAASI,EAAQmK,WAIjCvS,KAAAywB,cAAc,IAAIC,YAAY,uBAAwB,CACzDE,OAAQ,CAAE5oB,UAASI,SAAQmK,SAC3Bof,SAAS,EACTC,UAAU,KAGZ,OAAA3rB,EAAAjG,KAAKoa,wBAALnU,EAAAkH,KAA6BnN,KAAA,CAAEgI,UAASI,SAAQmK,WAElDgI,mBAAoB,CAACvS,EAASuK,WACvBvS,KAAAywB,cAAc,IAAIC,YAAY,qBAAsB,CACvDE,OAAQ,CAAE5oB,UAASuK,SACnBof,SAAS,EACTC,UAAU,KAGZ,OAAA3rB,EAAAjG,KAAKsa,sBAALrU,EAAAkH,KAA2BnN,KAAA,CAAEgI,UAASuK,SAAA,IAIrCvS,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAK8Z,eAEA9Z,KAAAyX,QAAQ/V,YAAY1B,KAAKuB,QACzBvB,KAAAyX,QAAQ/V,YAAY1B,KAAKyxB,OAGzBzxB,KAAA6xB,mBAAqB,IAAI1O,EAA8B,CAC1D3V,QAAUH,IACHrN,KAAAyxB,MAAMlW,SAASlO,EAAK,EAE3BH,gBAAiB,CAACrE,EAAuBgC,KACnC7K,KAAKuxB,eAAiB1mB,IACnB7K,KAAAyxB,MAAM3W,WAAWjS,GACtB7I,KAAK8xB,eAAa,EAGtBxf,YAAa,CAACzJ,EAAuBgC,KAC/B7K,KAAKuxB,eAAiB1mB,IACnB7K,KAAAyxB,MAAM/hB,QAAQ7G,GACnB7I,KAAK8xB,eAAa,EAGtBtf,aAAc,CAACxK,EAAuBuK,EAAe1H,KAC/C7K,KAAKuxB,eAAiB1mB,IACnB7K,KAAAyxB,MAAMvjB,WAAWlG,EAASuK,GAC/BvS,KAAK8xB,eAAa,EAGtBrf,gBAAiB,CAAClS,EAAiBgS,EAAe1H,KAC5C7K,KAAKuxB,eAAiB1mB,IACnB7K,KAAAyxB,MAAMhgB,cAAcc,GACzBvS,KAAK8xB,eAAa,EAGtBjf,gBAAiB,CAAC7K,EAAuBuK,EAAe1H,KAClD7K,KAAKuxB,eAAiB1mB,IACnB7K,KAAAyxB,MAAM/e,cAAc1K,EAASuK,GAClCvS,KAAK8xB,eAAa,EAGtB1kB,oBAAsB7M,IACpBP,KAAK8xB,cAAa,IAGAhf,EAAAvI,OAAOW,qBAAqBlL,KAAK6xB,oBAGlD7xB,KAAAmf,cAActF,WAAWtZ,IAC5BP,KAAK8Z,cAAa,IAIpB9Z,KAAK+xB,cAAgBpmB,EAAAA,QAAQpB,OAAOynB,2BAA2BzxB,IAC7DP,KAAK0D,SAAQ,KAIXiI,OAAAA,IAAQA,QAAApB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQoD,SACjC5M,KAAK0D,SACP,CAxKF,SAAIrF,GACK,OAAA2B,KAAKmf,cAAczE,UAAS,CAG9B,aAAAwV,CAAc7xB,GACd2B,KAAAmf,cAAc+Q,cAAc7xB,EAAK,CAGjC,YAAA8xB,CAAa9xB,GACb2B,KAAAmf,cAAcgR,aAAa9xB,EAAK,CA2BvC,6BAAWukB,GACT,MAAO,CAAC,SAAU,cAAe,aAAc,OAAQ,gBAAiB,uBAAwB,qBAAoB,CAuI9G,YAAA9I,GACD9Z,KAAAuB,OAAOC,YAAcxB,KAAKyB,WAAU,CAGnC,SAAAA,GACC,MAAA,mHAKOzB,KAAKiyB,cAAcprB,2MAAM,CAelC,SAAAqrB,CAAU1T,GACfxe,KAAKmyB,eAAiB3T,EACtBxe,KAAK8xB,cAAa,CAGb,YAAAM,GACLpyB,KAAKmyB,eAAiB,KACtBnyB,KAAK8xB,cAAa,CAGb,eAAAO,CAAgB7T,GAChBxe,KAAAyxB,MAAMlT,uBAAuBC,EAAO,CAGpC,aAAA8T,CAAc9T,GACdxe,KAAAyxB,MAAMhT,qBAAqBD,EAAO,CAGlC,aAAA+T,CAAc/T,GACdxe,KAAAyxB,MAAM/S,qBAAqBF,EAAO,CAGlC,WAAAgU,CAAYhU,GACZxe,KAAAyxB,MAAM9S,mBAAmBH,EAAO,CAGhC,iBAAAiU,CAAkBjU,GAClBxe,KAAAyxB,MAAM7S,yBAAyBJ,EAAO,CAGtC,cAAArE,CAAe5a,GACpBS,KAAKka,gBAAkB3a,CAAA,CAGlB,oBAAA8a,CAAqB9a,GAC1BS,KAAKoa,sBAAwB7a,CAAA,CAGxB,kBAAAgb,CAAmBhb,GACxBS,KAAKsa,oBAAsB/a,CAAA,CAGtB,WAAA6b,CAAYvQ,GAGjB7K,KAAKuxB,aAAe1mB,EAGf7K,KAAAyxB,MAAMrW,YAAYvQ,GACvB7K,KAAK8xB,eAGL9xB,KAAK2M,KAAK,CACR9B,SAAU7K,KAAKuxB,aACf9lB,aAAa,GACd,CAGK,YAAAqmB,GAEN,MAAM7wB,EAAQ,CACZ4J,SAAU7K,KAAKuxB,aACf9mB,YAAaqI,EAAsBvI,OAAOE,YAC1CioB,aAAc1yB,KAAKyxB,MAAM3oB,SAASsJ,QAGpC,OAAQpS,KAAKmyB,gBACX,UAAK,EACEnyB,KAAAwxB,QAAQrW,OAAOla,GACpB,MACF,KAAK,KACEjB,KAAAwxB,QAAQ/rB,MAAM,MACnB,MACF,QACQ,MAAAktB,EAAgB3yB,KAAKmyB,eAAelxB,GACrCjB,KAAAwxB,QAAQ/rB,MAAMktB,GAEvB,CAIF,UAAchmB,CAAK1L,SACX6R,EAAsBvI,OAAOoC,KAAK1L,SAClC6R,EAAsBvI,OAAOkD,kBAAiB,CAG/C,OAAA/J,GACL1D,KAAK2M,KAAK,CACR9B,SAAU7K,KAAKuxB,aACf9lB,aAAa,GACd,CAGH,iBAAAtH,GACEnE,KAAK0D,SAAQ,CAGf,oBAAApD,WACEN,KAAKmf,cAAckS,UACnB,OAAAprB,EAAAjG,KAAK6xB,qBAAoB5rB,EAAAoE,SACzB,OAAAnE,EAAAlG,KAAK+xB,gBAAe7rB,EAAAmE,QAAO,CAG7B,wBAAA/F,CAAyBC,EAAcC,EAAkBC,mBACvD,GAAID,IAAaC,EACjB,OAAQF,GACN,IAAK,SACG,MAAAsC,EAASpC,GAAYzE,KAAKiyB,cAAcprB,OAC9C7G,KAAK+D,MAAM8C,OAASA,EACpB,MACF,IAAK,gBACH,GAAIpC,EACE,IACFzE,KAAKka,gBAAkB,IAAI0Y,SAAS,QAASnuB,SACtC4I,GACP1B,OAAAzF,EAAAyF,OAAA1F,EAAAqH,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,yCAA0CA,EAAK,MAG9FrN,KAAKka,qBAAkB,EAEzB,MACF,IAAK,uBACH,GAAIzV,EACE,IACFzE,KAAKoa,sBAAwB,IAAIwY,SAAS,QAASnuB,SAC5C4I,GACP1B,OAAAjF,EAAAiF,OAAAlF,EAAA6G,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,gDAAiDA,EAAK,MAGrGrN,KAAKoa,2BAAwB,EAE/B,MACF,IAAK,qBACH,GAAI3V,EACE,IACFzE,KAAKsa,oBAAsB,IAAIsY,SAAS,QAASnuB,SAC1C4I,GACP1B,OAAAO,EAAAP,OAAAM,EAAAqB,EAAA3B,QAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,8CAA+CA,EAAK,MAGnGrN,KAAKsa,yBAAsB,EAE7B,MACF,IAAK,cACC7V,GACFzE,KAAKkwB,cAAc5nB,KAAKC,MAAM9D,IAEhC,MACF,IAAK,aACCA,GACFzE,KAAKmwB,aAAa7nB,KAAKC,MAAM9D,IAE/B,MACF,IAAK,OACEzE,KAAAmf,cAAc0R,QAAQpsB,GAE/B,EAMJkD,EAAgB,gBAAiB2pB,GCrX1B,MAAMuB,UAA+BrtB,EAU1C,WAAA5F,CAAYyhB,GACJvhB,QARAlC,EAAAoC,KAAA,sBAGApC,EAAAoC,KAAA,cACApC,EAAAoC,KAAA,kBACApC,EAAAoC,KAAA,qBAINA,KAAK2Z,mBAAqB0H,EAASxH,WAAWtZ,IAC5CP,KAAKowB,aAAY,GAClB,CAGH,cAAAvqB,GAGO7F,KAAA8hB,WAAa1gB,SAASC,cAAc,OACzCrB,KAAK8hB,WAAWxb,UAAY,wBAG5BtG,KAAK8yB,eAAiB,IAAIlsB,EAAkBlE,EAAgBC,OAGvD3C,KAAA+yB,kBAAoB,IAAI7R,EAAwB,CACnDG,SAAUrhB,KAAK2Z,mBAAmBc,QAClC2G,SAAU,WAEZphB,KAAK+yB,kBAAkB1d,GAAK,eAEtB,MAAAtR,EAAQ3C,SAASC,cAAc,SAWrC,OAVM0C,EAAAvC,YAAcxB,KAAKyB,YAEpBzB,KAAA8hB,WAAWpgB,YAAYqC,GACvB/D,KAAA8hB,WAAWpgB,YAAY1B,KAAK8yB,gBAC5B9yB,KAAA8hB,WAAWpgB,YAAY1B,KAAK+yB,mBAC5B/yB,KAAAe,OAAOW,YAAY1B,KAAK8hB,YAG7B9hB,KAAKowB,cAEEpwB,KAAK8hB,UAAA,CAGN,SAAArgB,GACC,MAAA,4PAAA,CAeF,mBAAA2L,CAAoB3C,SACpB,OAAAxE,EAAAjG,KAAA+yB,sBAAmBtR,SAAShX,GACjCzK,KAAKowB,aAAY,CAGX,WAAAA,2CACN,MAAM/xB,EAAQ2B,KAAK2Z,mBAAmBc,QAAQC,WAGzC,OAAAhU,EAAA1G,KAAA8yB,iBAAgBpsB,EAAAY,iBAAgB,OAAAb,EAAA,OAAApI,EAAA,OAAAA,EAAA,MAAAA,SAAAA,EAAOshB,YAAO,EAAA1Z,EAAApH,iBAAQD,WAAtB,EAAA6H,EAA4BpD,QAASjF,EAAoB,MACzF,OAAAkO,EAAAtM,KAAA8yB,iBAAAxmB,EAAgB/E,eAAc,OAAAyE,EAAA,OAAAE,EAAA,OAAAD,EAAA,MAAA5N,OAAAA,EAAAA,EAAOshB,YAAP,EAAA1T,EAAcpN,aAAd,EAAAqN,EAAsBtN,WAAtB,EAAAoN,EAA4B1I,MAAOZ,EAAgBC,OACtF,OAAKyM,EAAApP,KAAA8yB,iBAAgB1jB,EAAA5H,uBAAsB,OAAA6E,EAAA,OAAAhO,EAAA,MAAAA,OAAAA,EAAAA,EAAOshB,YAAP,EAAApT,EAAc1N,aAAd,EAAAwN,EAAsBzL,kBAAmB,eAC/E,OAAA0U,EAAAtV,KAAA8yB,iBAAAxd,EAAgB7N,4BAA2B,OAAAmI,EAAA,OAAAT,EAAA,MAAA9Q,OAAAA,EAAAA,EAAOshB,YAAP,EAAAxQ,EAActQ,aAAd,EAAA+Q,EAAsBrN,uBAAwBnE,EAAoB,QAC7G,OAAA4R,EAAAhQ,KAAA8yB,iBAAA9iB,EAAgBtI,6BAA4B,OAAAmI,EAAA,OAAAC,EAAA,MAAAzR,OAAAA,EAAAA,EAAOshB,YAAP,EAAA7P,EAAcjR,aAAd,EAAAgR,EAAsBrN,wBAAyBpE,EAAoB,QAG/G,OAAA6R,EAAAjQ,KAAA+yB,sBAAmBjZ,aAAa,SAAQ,CAI/C,oBAAAxZ,GACEN,KAAK2Z,mBAAmBkF,aAAY,EAKxClX,EAAgB,4BAA6BkrB,GC9EtC,MAAMG,UAA8BrzB,EAyCzC,WAAAC,GACQE,QAvCiBlC,EAAAoC,KAAA,SAAA,SACCpC,EAAAoC,KAAA,UAAA,SAC4BpC,EAAAoC,KAAA,kBAAA,aAC/BpC,EAAAoC,KAAA,OAAA,QACEpC,EAAAoC,KAAA,SAAA,KACCpC,EAAAoC,KAAA,UAAA,QACFpC,EAAAoC,KAAA,QAAA,KAGApC,EAAAoC,KAAA,gBAAA,IAAI4vB,EAAyBxM,IAc7CxlB,EAAAoC,KAAA,kBACApC,EAAAoC,KAAA,UACApC,EAAAoC,KAAA,UACApC,EAAAoC,KAAA,UAGApC,EAAAoC,KAAA,sBAGApC,EAAAoC,KAAA,2BASN,MAAMe,EAASf,KAAKkB,aAAa,CAAEf,KAAM,SAGzCH,KAAK8yB,eAAiB,IAAID,EAAuB7yB,KAAKmf,eACjDnf,KAAA8yB,eAAertB,WAAM,GAGrBzF,KAAAizB,OAAS7xB,SAASC,cAAc,OACrCrB,KAAKizB,OAAO3sB,UAAY,QAGxBtG,KAAKkzB,OAAS,IAAI5B,EAAatxB,KAAKmf,eAC/Bnf,KAAAkzB,OAAO5xB,aAAa,SAAU,QAE9BtB,KAAAuB,OAASH,SAASC,cAAc,SACrCrB,KAAK8Z,eAEE/Y,EAAAW,YAAY1B,KAAKuB,QACjBR,EAAAW,YAAY1B,KAAK8yB,gBACjB/xB,EAAAW,YAAY1B,KAAKizB,QACnBjzB,KAAAizB,OAAOvxB,YAAY1B,KAAKkzB,QAG7BlzB,KAAK8yB,eAAerzB,iBAAiB,QAASO,KAAKmzB,YAAY7S,KAAKtgB,OACpEoB,SAAS3B,iBAAiB,QAASO,KAAKugB,mBAAmBD,KAAKtgB,OAGhEA,KAAKozB,sBAGApzB,KAAA6xB,mBAAqB,IAAI1O,EAA8BnjB,MACtC8S,EAAAvI,OAAOW,qBAAqBlL,KAAK6xB,oBAGlD7xB,KAAAmf,cAActF,WAAWtZ,IAC5BP,KAAK8Z,cAAa,GACnB,CAnEH,SAAIzb,GACK,OAAA2B,KAAKmf,cAAczE,UAAS,CAG9B,aAAAwV,CAAc7xB,GACd2B,KAAAmf,cAAc+Q,cAAc7xB,EAAK,CAGjC,YAAA8xB,CAAa9xB,GACb2B,KAAAmf,cAAcgR,aAAa9xB,EAAK,CAevC,6BAAWukB,GACT,MAAO,CAAC,kBAAmB,gBAAiB,uBAAwB,qBAAsB,cAAe,eAAgB,MAAO,QAAS,SAAU,OAAQ,cAAe,aAAc,OAAM,CA8CxL,YAAA9I,GACD9Z,KAAAuB,OAAOC,YAAcxB,KAAKyB,WAAU,CAGnC,SAAAA,uBACC,MAAA,8RAcW,OAAAyE,EAAA,cAAK7H,MAAMshB,gBAAO1gB,aAAlB,EAAAiH,EAA0BtF,kBAAmB,mCAC1C,OAAA8F,EAAA,cAAKrI,MAAMshB,gBAAO1gB,aAAlB,EAAAyH,EAA0BjG,eAAgB,4BACjD,OAAAyL,EAAA,cAAK7N,MAAMshB,gBAAO1gB,aAAlB,EAAAiN,EAA0BxN,SAAU,0CAChC,OAAA4N,EAAA,cAAKjO,MAAMshB,gBAAO1gB,aAAlB,EAAAqN,EAA0BvL,SAAU,oEAEzCf,KAAKoH,4BACJpH,KAAKmH,+TAAO,CAmB5B,wBAAA7C,CAAyBC,EAAchE,EAAWkE,GAChD,OAAQF,GACN,IAAK,kBACCvE,KAAKqzB,gBAAgB5uB,KACvBzE,KAAKszB,gBAAkB7uB,EACvBzE,KAAKozB,uBAEP,MACF,IAAK,cACHpzB,KAAKoH,OAAS3C,EACTzE,KAAAuzB,QAAQ9uB,EAAUzE,KAAKmH,SAC5B,MACF,IAAK,eACHnH,KAAKmH,QAAU1C,EACVzE,KAAAuzB,QAAQvzB,KAAKoH,OAAQ3C,GAC1B,MACF,IAAK,MACHzE,KAAKwzB,KAAO/uB,EACZzE,KAAKozB,sBACL,MACF,IAAK,QACHpzB,KAAKyzB,OAAShvB,EACdzE,KAAKozB,sBACL,MACF,IAAK,SACHpzB,KAAK0zB,QAAUjvB,EACfzE,KAAKozB,sBACL,MACF,IAAK,OACHpzB,KAAK2zB,MAAQlvB,EACbzE,KAAKozB,sBACL,MACF,IAAK,cACC3uB,GACFzE,KAAKkwB,cAAc5nB,KAAKC,MAAM9D,IAEhC,MACF,IAAK,aACCA,GACFzE,KAAKmwB,aAAa7nB,KAAKC,MAAM9D,IAE/B,MACF,IAAK,OACEzE,KAAAmf,cAAc0R,QAAQpsB,GAE/B,CAGK,mBAAA2I,CAAoB7M,GACzBP,KAAKmb,QAAO,CAGP,cAAAhB,CAAe5a,GACfS,KAAAkzB,OAAO/Y,eAAe5a,EAAO,CAG7B,oBAAA8a,CAAqB9a,GACrBS,KAAAkzB,OAAO7Y,qBAAqB9a,EAAO,CAGnC,kBAAAgb,CAAmBhb,GACnBS,KAAAkzB,OAAO3Y,mBAAmBhb,EAAO,CAGhC,eAAA8zB,CAAgBt1B,GAMf,MAL8C,CACnD,YAAa,WAAY,aACzB,eAAgB,cAAe,gBAC/B,eAAgB,cAAe,iBAEX+V,SAAS/V,EAAmC,CAG5D,mBAAAq1B,GASN,OAPKpzB,KAAAizB,OAAOlvB,MAAM6vB,IAAM,GACnB5zB,KAAAizB,OAAOlvB,MAAM8vB,OAAS,GACtB7zB,KAAAizB,OAAOlvB,MAAM+vB,KAAO,GACpB9zB,KAAAizB,OAAOlvB,MAAMgwB,MAAQ,GACrB/zB,KAAAizB,OAAOlvB,MAAMiwB,OAAS,GACtBh0B,KAAAizB,OAAOlvB,MAAMkwB,UAAY,GAEtBj0B,KAAKszB,iBACX,IAAK,YACEtzB,KAAAizB,OAAOlvB,MAAM6vB,IAAM5zB,KAAKwzB,KACxBxzB,KAAAizB,OAAOlvB,MAAMgwB,MAAQ/zB,KAAKyzB,OAC/B,MACF,IAAK,WACEzzB,KAAAizB,OAAOlvB,MAAM6vB,IAAM5zB,KAAKwzB,KACxBxzB,KAAAizB,OAAOlvB,MAAM+vB,KAAO9zB,KAAK2zB,MAC9B,MACF,IAAK,aACE3zB,KAAAizB,OAAOlvB,MAAM6vB,IAAM5zB,KAAKwzB,KACxBxzB,KAAAizB,OAAOlvB,MAAM+vB,KAAO,MACpB9zB,KAAAizB,OAAOlvB,MAAMkwB,UAAY,mBAC9B,MACF,IAAK,eACEj0B,KAAAizB,OAAOlvB,MAAM8vB,OAAS7zB,KAAK0zB,QAC3B1zB,KAAAizB,OAAOlvB,MAAMgwB,MAAQ/zB,KAAKyzB,OAC/B,MACF,IAAK,cACEzzB,KAAAizB,OAAOlvB,MAAM8vB,OAAS7zB,KAAK0zB,QAC3B1zB,KAAAizB,OAAOlvB,MAAM+vB,KAAO9zB,KAAK2zB,MAC9B,MACF,IAAK,gBACE3zB,KAAAizB,OAAOlvB,MAAM8vB,OAAS7zB,KAAK0zB,QAC3B1zB,KAAAizB,OAAOlvB,MAAM+vB,KAAO,MACpB9zB,KAAAizB,OAAOlvB,MAAMkwB,UAAY,mBAC9B,MACF,IAAK,eACEj0B,KAAAizB,OAAOlvB,MAAM6vB,IAAM,MACnB5zB,KAAAizB,OAAOlvB,MAAMgwB,MAAQ/zB,KAAKyzB,OAC1BzzB,KAAAizB,OAAOlvB,MAAMkwB,UAAY,mBAC9B,MACF,IAAK,cACEj0B,KAAAizB,OAAOlvB,MAAM6vB,IAAM,MACnB5zB,KAAAizB,OAAOlvB,MAAM+vB,KAAO9zB,KAAK2zB,MACzB3zB,KAAAizB,OAAOlvB,MAAMkwB,UAAY,mBAC9B,MACF,IAAK,gBACEj0B,KAAAizB,OAAOlvB,MAAM6vB,IAAM,MACnB5zB,KAAAizB,OAAOlvB,MAAM+vB,KAAO,MACpB9zB,KAAAizB,OAAOlvB,MAAMkwB,UAAY,wBAElC,CAGM,WAAAd,CAAY/kB,GAClBA,EAAMvM,kBACN,MAAMqyB,EAA0C,UAA9Bl0B,KAAKizB,OAAOlvB,MAAMwR,QAK7BvV,KAAAizB,OAAOlvB,MAAMwR,QAHf2e,EAGyB,OAFA,OAG9B,CAGM,kBAAA3T,CAAmBnS,GACpBpO,KAAK4T,SAASxF,EAAM7I,UAClBvF,KAAAizB,OAAOlvB,MAAMwR,QAAU,OAC9B,CAGK,UAAA4e,CAAWvuB,GAChB5F,KAAKkzB,OAAOvvB,UAAY,GACnB3D,KAAAkzB,OAAOxxB,YAAYkE,EAAO,CAG1B,OAAA2tB,CAAQzsB,EAAeD,GAC5B7G,KAAKoH,OAASN,EACd9G,KAAKmH,QAAUN,EACV7G,KAAAizB,OAAOlvB,MAAM+C,MAAQA,EACrB9G,KAAAizB,OAAOlvB,MAAM8C,OAASA,CAAA,CAGtB,WAAAutB,CAAYC,WACbr0B,KAAKqzB,gBAAgBgB,IACvBr0B,KAAKszB,gBAAkBe,EACvBr0B,KAAKozB,uBAELznB,SAAAA,mBAAQpB,OAAOqB,aAAfD,EAAAA,EAAuBnC,QAAQ+D,SAA/B5B,EAAuC0B,MAAM,qBAAqBgnB,IACpE,CAGK,WAAAjZ,CAAYvQ,GACZ7K,KAAAkzB,OAAO9X,YAAYvQ,EAAQ,CAI3B,cAAAypB,CAAe9V,GACfxe,KAAAkzB,OAAOhB,UAAU1T,EAAO,CAGxB,iBAAA+V,GACLv0B,KAAKkzB,OAAOd,cAAa,CAGpB,oBAAAoC,CAAqBhW,GACrBxe,KAAAkzB,OAAOb,gBAAgB7T,EAAO,CAG9B,kBAAAiW,CAAmBjW,GACnBxe,KAAAkzB,OAAOZ,cAAc9T,EAAO,CAG5B,kBAAAkW,CAAmBlW,GACnBxe,KAAAkzB,OAAOX,cAAc/T,EAAO,CAG5B,gBAAAmW,CAAiBnW,GACjBxe,KAAAkzB,OAAOV,YAAYhU,EAAO,CAG1B,sBAAAoW,CAAuBpW,GACvBxe,KAAAkzB,OAAOT,kBAAkBjU,EAAO,CAGhC,kBAAAqW,CAAmBrW,GACxBxe,KAAK80B,wBAA0BtW,EAC/Bxe,KAAKmb,QAAO,CAGN,MAAAA,GACA,MAAA1Q,EAAcqI,EAAsBvI,OAAOE,YACjD,OAAQzK,KAAK80B,yBACX,UAAK,EACL,KAAK,KACE90B,KAAA8yB,eAAertB,WAAM,GACrBzF,KAAA8yB,eAAe1lB,oBAAoB3C,GACxC,MACF,QACE,MAAMsqB,EAAe/0B,KAAK80B,wBAAwB,CAAErqB,gBAC/CzK,KAAA8yB,eAAertB,MAAMsvB,GAE9B,CAGF,oBAAAz0B,SACE,OAAA2F,EAAAjG,KAAK6xB,qBAAoB5rB,EAAAoE,SACzBrK,KAAKmf,cAAckS,SAAQ,EAI/B1pB,EAAgB,2BAA4BqrB,8GC5WrC,MACE,eAAA9lB,CAAiB3M,EAAiBsd,GAAgC,CAClE,WAAAvL,CAAa/R,EAAiBsd,GAAgC,CAC9D,mBAAAzQ,CAAqB7M,GAAiB,CACtC,YAAAiS,CAAcjS,EAAiBsd,EAAYmX,GAAiC,CAC5E,eAAAviB,CAAiBlS,EAAiBsd,EAAYmX,GAAiC,CAC/E,eAAAniB,CAAiBtS,EAAiBsd,EAAYmX,GAAiC,CAC/E,OAAAxnB,CAASjN,GAAgB,sHCI3B,SAAwByH,GAC7B,OAAO8K,EAAsBvI,OAAOqE,eAAe,CAAE5G,WACvD,iBANO,SAAsBA,GAC3B,OAAO8K,EAAsBvI,OAAOuE,aAAa,CAAE9G,WACrD,0DAVO,SAAoBA,GACzB,OAAO8K,EAAsBvI,OAAOkE,YAAY,CAAEzG,WACpD,iBAEO,SAAsBA,GAC3B,OAAO8K,EAAsBvI,OAAOmE,cAAc,CAAE1G,WACtD,+BAUO,SAAqBA,GAC1B,OAAO8K,EAAsBvI,OAAOoE,YAAY,CAAE3G,WACpD"}
|