{"version":3,"file":"index.mjs","sources":["../src/utils/courier-colors.ts","../src/utils/theme.ts","../src/utils/system-theme-mode.ts","../src/components/courier-base-element.ts","../src/components/courier-system-theme-element.ts","../src/components/courier-button.ts","../src/components/courier-icon.ts","../src/components/courier-link.ts","../src/components/courier-element.ts","../src/components/courier-info-state.ts","../src/components/courier-icon-button.ts","../src/utils/registeration.ts","../src/components/courier-radio.ts","../src/components/courier-checkbox.ts","../src/utils/action-styles.ts","../src/managers/courier-theme-manager.ts","../src/index.ts"],"sourcesContent":["/** Returns true when the given hex color looks dark (relative luminance < 0.5). */\nexport function isDarkColor(color: string): boolean {\n  const match = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(color.trim());\n  if (!match) return true;\n  let v = match[1];\n  if (v.length === 3) v = v.split('').map(c => c + c).join('');\n  const r = parseInt(v.substring(0, 2), 16);\n  const g = parseInt(v.substring(2, 4), 16);\n  const b = parseInt(v.substring(4, 6), 16);\n  return (0.299 * r + 0.587 * g + 0.114 * b) / 255 < 0.5;\n}\n\n/**\n * Move a hex color toward the opposite end of the scale by `amount` (0-1).\n *\n * Dimming is only feedback when there is brightness to remove. A near-black fill has none, so\n * `filter: brightness()` leaves it looking inert — the case a template hits whenever it carries\n * its own dark color into dark mode. Lightening a dark color and darkening a light one gives a\n * step that is visible whichever end the fill sits at. Returns undefined for anything that is\n * not hex, leaving the caller on its own fallback.\n */\nexport function shadeTowardMiddle(color: string, amount: number): string | undefined {\n  const match = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(color.trim());\n  if (!match) return undefined;\n\n  let v = match[1];\n  if (v.length === 3) v = v.split('').map(c => c + c).join('');\n\n  const target = isDarkColor(color) ? 255 : 0;\n  const channel = (offset: number): string => {\n    const from = parseInt(v.substring(offset, offset + 2), 16);\n    return Math.round(from + (target - from) * amount).toString(16).padStart(2, '0');\n  };\n\n  return `#${channel(0)}${channel(2)}${channel(4)}`.toUpperCase();\n}\n\nexport const CourierColors = {\n  black: {\n    400: '#0A0A0A',\n    500: '#171717',\n    500_10: '#1717171A',\n    500_20: '#17171733',\n  },\n  gray: {\n    200: '#F5F5F5',\n    400: '#3A3A3A',\n    500: '#E5E5E5',\n    600: '#737373',\n    // Between 600 and 700, for an outline that has to read against a near-black face without\n    // shouting. 600 is right on white (4.7:1) but 3.8:1 on black[500], which is louder than the\n    // button it outlines; 700 falls to 1.9:1 and disappears.\n    650: '#585858',\n    // Opaque equivalents of white[500_20]/white[500_10] over black[500], for\n    // hover/active states on floating surfaces where a translucent overlay\n    // would let page content bleed through (e.g. toasts).\n    700: '#454545',\n    800: '#2E2E2E',\n  },\n  white: {\n    500: '#FFFFFF',\n    500_10: '#FFFFFF1A',\n    500_20: '#FFFFFF33',\n  },\n  blue: {\n    // Higher is darker, as elsewhere in the palette. 300 and 600 exist so a link has somewhere\n    // to move on hover without leaving the blue it rests at.\n    300: '#93C5FD',\n    400: '#60A5FA',\n    500: '#2563EB',\n    600: '#1D4ED8',\n  }\n};\n\n/**\n * Default primary color used across Courier UI components (checkboxes, radios, etc.).\n * Matches the inbox primary color for consistency.\n * @public\n */\nexport const COURIER_DEFAULT_PRIMARY_COLOR = CourierColors.blue[500];","import { CourierColors } from \"./courier-colors\";\n\nexport interface Colors {\n  primary: string;\n  secondary: string;\n  border: string;\n  link: string;\n  icon: string;\n}\n\nexport interface Theme {\n  colors: Colors\n  button: {\n    cornerRadius: string;\n  }\n}\n\nexport const theme: { light: Theme, dark: 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};","export type SystemThemeMode = 'light' | 'dark';\n\nexport type CourierComponentThemeMode = SystemThemeMode | 'system';\n\nexport const getSystemThemeMode = (): SystemThemeMode => {\n  if (typeof window === 'undefined') {\n    return 'light';\n  }\n\n  return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n};\n\nexport const addSystemThemeModeListener = (callback: (mode: SystemThemeMode) => void): (() => void) => {\n  if (typeof window === 'undefined') {\n    return () => { };\n  }\n\n  const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n  const handler = (e: MediaQueryListEvent) => {\n    callback(e.matches ? 'dark' : 'light');\n  };\n\n  mediaQuery.addEventListener('change', handler);\n\n  return () => {\n    mediaQuery.removeEventListener('change', handler);\n  };\n};\n","/**\n * Resolve the class we can safely `extends`.\n * • In the browser → the real `HTMLElement`.\n * • During SSR / Node → a no-op stub so `class … extends …` is still valid.\n */\nconst HTMLElementBase: typeof HTMLElement = ((): any => {\n  // `typeof HTMLElement` throws in some bundlers, so wrap in try/catch.\n  try {\n    // Will be `undefined` under Node.\n    return typeof HTMLElement === 'undefined' ? class { } : HTMLElement;\n  } catch {\n    return class { };\n  }\n})();\n\n/**\n * Universal base class for Courier web-components.\n *\n * ⚠️  IMPORTANT:  When you create a concrete element, extend **this**\n *     (or `HTMLElementBase`) instead of `HTMLElement` directly.\n */\nexport class CourierBaseElement extends HTMLElementBase {\n  /** Tag-name you’ll use in `customElements.define()` */\n  static get id(): string {\n    return 'courier-base-element';\n  }\n\n  /** Prevents double-initialisation when the node is re-inserted. */\n  #isInitialised = false;\n\n  /* ------------------------------------------------------------------ */\n  /*  Custom-elements lifecycle hooks                                   */\n  /* ------------------------------------------------------------------ */\n\n  connectedCallback() {\n    if (this.#isInitialised) return;\n    this.#isInitialised = true;\n    this.onComponentMounted?.();\n  }\n\n  disconnectedCallback() {\n    this.#isInitialised = false;\n    this.onComponentUnmounted?.();\n  }\n\n  /* ------------------------------------------------------------------ */\n  /*  Overridable hooks                                                 */\n  /* ------------------------------------------------------------------ */\n\n  /** Called **once** when the element first becomes part of the DOM. */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  protected onComponentMounted(): void { }\n\n  /** Called when the element is removed from the DOM. */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  protected onComponentUnmounted(): void { }\n}","import { addSystemThemeModeListener, getSystemThemeMode, SystemThemeMode } from \"../utils/system-theme-mode\";\nimport { CourierBaseElement } from \"./courier-base-element\";\n\nexport class CourierSystemThemeElement extends CourierBaseElement {\n\n  static get id(): string {\n    return 'courier-system-theme-element';\n  }\n\n  // State\n  private _currentSystemTheme: SystemThemeMode;\n  public get currentSystemTheme() {\n    return this._currentSystemTheme;\n  }\n\n  // System theme\n  private _systemThemeCleanup: (() => void) | undefined;\n\n  constructor() {\n    super();\n\n    // Get the initial system theme\n    this._currentSystemTheme = getSystemThemeMode();\n\n    // Set up the system theme listener\n    this._systemThemeCleanup = addSystemThemeModeListener(mode => {\n      this._currentSystemTheme = mode;\n      this.onSystemThemeChange(mode);\n    });\n  }\n\n  protected onComponentUnmounted() {\n    this._systemThemeCleanup?.();\n    super.onComponentUnmounted();\n  }\n\n  protected onSystemThemeChange(_: SystemThemeMode): void {\n    // Default implementation does nothing\n  }\n\n}","import { CourierComponentThemeMode, SystemThemeMode } from \"../utils/system-theme-mode\";\nimport { theme } from \"../utils/theme\";\nimport { CourierColors, shadeTowardMiddle } from \"../utils/courier-colors\";\nimport { CourierSystemThemeElement } from \"./courier-system-theme-element\";\n\n/**\n * A button's look, in the order an action asks for attention: `primary` is the default an action\n * with no style renders as, `secondary` and `tertiary` are the two louder ones, and `link` stops\n * being a button at all.\n *\n * The two vocabularies used to cross over — `style: 'button'` resolved to `variant: 'secondary'`,\n * `style: 'tertiary'` to `variant: 'primary'` — so every reader had to carry the mapping. Now\n * `button` is `primary` and the other three share a name with the style that asks for them.\n */\nexport type CourierButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'link';\n\nexport type CourierButtonProps = {\n  mode: CourierComponentThemeMode\n  text?: string,\n  shadow?: string,\n  border?: string,\n  borderRadius?: string,\n  backgroundColor?: string,\n  hoverBackgroundColor?: string,\n  activeBackgroundColor?: string,\n  fontFamily?: string,\n  fontSize?: string,\n  fontWeight?: string,\n  textColor?: string,\n  hoverTextColor?: string,\n  padding?: string,\n  textDecoration?: string,\n  variant?: CourierButtonVariant,\n  onClick?: () => void\n}\n\n/**\n * A button with no visible outline still reserves the same border box as one that has an\n * outline, so a filled and an outlined button sitting in the same row line up.\n */\nexport const TRANSPARENT_BORDER = '1px solid transparent';\n\nconst baseButtonStyles = {\n  borderRadius: '4px',\n  fontSize: '14px',\n  padding: '6px 10px',\n  textDecoration: 'none'\n} as const;\n\nexport const CourierButtonVariants = {\n  /**\n   * The plain button, and what an action with no style renders as: the row showing through,\n   * edged with the divider hairline. What an Inbox action has always looked like.\n   */\n  primary: (mode: SystemThemeMode) => {\n    return {\n      ...baseButtonStyles,\n      backgroundColor: theme[mode].colors.secondary,\n      textColor: theme[mode].colors.primary,\n      fontWeight: '500',\n      // Opaque rather than translucent: an action can sit on a floating surface (a toast) where\n      // page content would otherwise show through the overlay.\n      hoverBackgroundColor: mode === 'light' ? CourierColors.gray[200] : CourierColors.gray[800],\n      activeBackgroundColor: mode === 'light' ? CourierColors.gray[500] : CourierColors.gray[700],\n      border: `1px solid ${theme[mode].colors.border}`,\n      shadow: mode === 'light'\n        ? '0px 1px 2px 0px rgba(0, 0, 0, 0.06)'\n        : '0px 1px 2px 0px rgba(255, 255, 255, 0.1)'\n    };\n  },\n\n  /**\n   * The outlined button. The same face as the plain one, told apart by an edge you can see and\n   * by sitting flat where the plain button floats.\n   */\n  secondary: (mode: SystemThemeMode) => {\n    return {\n      ...baseButtonStyles,\n      backgroundColor: theme[mode].colors.secondary,\n      textColor: theme[mode].colors.primary,\n      fontWeight: '500',\n      hoverBackgroundColor: mode === 'light' ? CourierColors.gray[200] : CourierColors.gray[800],\n      activeBackgroundColor: mode === 'light' ? CourierColors.gray[500] : CourierColors.gray[700],\n      border: `1px solid ${mode === 'light' ? CourierColors.gray[600] : CourierColors.gray[650]}`,\n      // An outline is the whole statement; a shadow underneath it would be a second one.\n      shadow: 'none'\n    };\n  },\n\n  /**\n   * The solid button, the loudest of the three: a fill in the mode's ink, for the action that\n   * is the thing to do on the message.\n   */\n  tertiary: (mode: SystemThemeMode) => {\n    return {\n      ...baseButtonStyles,\n      backgroundColor: theme[mode].colors.primary,\n      textColor: theme[mode].colors.secondary,\n      fontWeight: '500',\n      // The fill sits at whichever end of the scale the mode is not, so there is nothing to dim\n      // it toward — the brightness fallback would move a near-black fill by two values and dim\n      // the label instead. Each mode steps toward the middle rather than past the end.\n      hoverBackgroundColor: mode === 'light' ? CourierColors.gray[800] : CourierColors.gray[200],\n      activeBackgroundColor: mode === 'light' ? CourierColors.gray[700] : CourierColors.gray[500],\n      border: TRANSPARENT_BORDER,\n      shadow: 'none'\n    };\n  },\n\n\n  /** Reads as an inline hyperlink rather than a button — no fill, no border, no padding. */\n  link: (mode: SystemThemeMode) => {\n    return {\n      ...baseButtonStyles,\n      backgroundColor: 'transparent',\n      // A link reads as a link: it rests at the link color rather than at the body text color\n      // the buttons use for their labels.\n      textColor: theme[mode].colors.link,\n      fontWeight: '500',\n      border: 'none',\n      shadow: 'none',\n      padding: '0px',\n      textDecoration: 'underline',\n      // A link is text, so it answers a pointer the way text does — by moving its own color, not\n      // by growing a box. Naming the hover fill transparent is what keeps the brightness\n      // fallback from dimming the label on top of that move.\n      hoverBackgroundColor: 'transparent',\n      // One step further from the page than the resting color, so the move is visible in either\n      // mode. Press is left to the brightness fallback, which needs no fill to act on.\n      hoverTextColor: mode === 'light' ? CourierColors.blue[600] : CourierColors.blue[300]\n    };\n  }\n} as const;\n\nexport class CourierButton extends CourierSystemThemeElement {\n\n  static get id(): string {\n    return 'courier-button';\n  }\n\n  // Components\n  private _button: HTMLButtonElement;\n  private _style: HTMLStyleElement;\n  /**\n   * Kept so the button can restyle itself when the system theme flips.\n   *\n   * `mode: 'system'` is resolved against `currentSystemTheme` when the styles are built, which\n   * is only correct at the moment it is built. Everything else in the inbox re-reads its theme\n   * through the theme manager's subscription; a button had no equivalent, so an OS flip left\n   * the actions — and only the actions — wearing the colors of the mode that had just ended.\n   */\n  private _props: CourierButtonProps;\n\n  constructor(props: CourierButtonProps) {\n    super();\n    this._props = props;\n    const shadow = this.attachShadow({ mode: 'open' });\n\n    this._button = document.createElement('button');\n    this._button.setAttribute('part', 'button');\n\n    this._style = document.createElement('style');\n    this._style.textContent = this.getStyles(props);\n\n    shadow.appendChild(this._style);\n    shadow.appendChild(this._button);\n\n    this.updateButton(props);\n\n    // Add click handler with prevent default and stop propagation\n    this._button.addEventListener('click', (e: MouseEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n      if (props.onClick) {\n        props.onClick();\n      }\n    });\n  }\n\n  private getStyles(props: CourierButtonProps): string {\n\n    const mode = props.mode === 'system' ? this.currentSystemTheme : props.mode;\n\n    // `primary` is what an action with no style of its own renders as, so it is the default here\n    // for the same reason.\n    const defaults = CourierButtonVariants[props.variant ?? 'primary'](mode);\n\n    // The variant's own hover pairs with the variant's own fill. Once a caller supplies a fill of\n    // its own there is no matching entry to reach for, so the feedback is derived from that color\n    // by dimming it — which works whatever color it turns out to be.\n    // `transparent` is the absence of a fill, not a fill of its own. There is nothing in it to\n    // derive a hover from — `shadeTowardMiddle` cannot read it and the brightness fallback has\n    // nothing to dim — so the variant's own feedback has to stand, or the button looks inert\n    // under the pointer.\n    const ownFill = props.backgroundColor === 'transparent' ? undefined : props.backgroundColor;\n    const usingOwnFill = Boolean(ownFill) && ownFill !== defaults.backgroundColor;\n    const ownHover = usingOwnFill ? shadeTowardMiddle(ownFill!, 0.12) : undefined;\n    const ownActive = usingOwnFill ? shadeTowardMiddle(ownFill!, 0.22) : undefined;\n    const hover = props.hoverBackgroundColor ?? (usingOwnFill ? ownHover : (defaults as { hoverBackgroundColor?: string }).hoverBackgroundColor);\n    const active = props.activeBackgroundColor ?? (usingOwnFill ? ownActive : (defaults as { activeBackgroundColor?: string }).activeBackgroundColor);\n\n    // A recolor on hover is the link's feedback rather than an extra on top of a fill, so a\n    // caller that supplies its own text color takes the variant's hover color with it.\n    const usingOwnText = Boolean(props.textColor) && props.textColor !== defaults.textColor;\n    const hoverText = props.hoverTextColor ?? (usingOwnText ? undefined : (defaults as { hoverTextColor?: string }).hoverTextColor);\n\n    return `\n      :host {\n        display: inline-block;\n      }\n\n      button {\n        border: none;\n        border-radius: ${props.borderRadius ?? defaults.borderRadius};\n        font-weight: ${props.fontWeight ?? defaults.fontWeight};\n        font-family: ${props.fontFamily ?? 'inherit'};\n        font-size: ${props.fontSize ?? defaults.fontSize};\n        padding: ${props.padding ?? defaults.padding};\n        cursor: pointer;\n        width: 100%;\n        height: 100%;\n        background-color: ${props.backgroundColor ?? defaults.backgroundColor};\n        color: ${props.textColor ?? defaults.textColor};\n        border: ${props.border ?? defaults.border};\n        box-shadow: ${props.shadow ?? defaults.shadow};\n        text-decoration: ${props.textDecoration ?? defaults.textDecoration};\n        touch-action: manipulation;\n      }\n\n      button:hover {\n        ${hover ? `background-color: ${hover};` : 'filter: brightness(0.9);'}\n        ${hoverText ? `color: ${hoverText};` : ''}\n      }\n\n      button:active {\n        ${active ? `background-color: ${active};` : 'filter: brightness(0.8);'}\n      }\n\n      button:disabled {\n        opacity: 0.5;\n        cursor: not-allowed;\n      }\n    `;\n  }\n\n  public updateButton(props: CourierButtonProps) {\n    this._props = props;\n    if (props.text) {\n      this._button.textContent = props.text;\n    }\n    this._style.textContent = this.getStyles(props);\n  }\n\n  protected onSystemThemeChange(_: SystemThemeMode): void {\n    // A button pinned to 'light' or 'dark' was never asking the system, so leave it alone.\n    if (this._props.mode === 'system') {\n      this._style.textContent = this.getStyles(this._props);\n    }\n  }\n}","import { CourierColors } from \"../utils/courier-colors\";\nimport { CourierBaseElement } from \"./courier-base-element\";\n\nexport const 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  chevronDown: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M12 15.5C11.8125 15.5 11.6562 15.4375 11.5312 15.3125L6.28125 10.0625C5.96875 9.78125 5.96875 9.3125 6.28125 9.03125C6.5625 8.71875 7.03125 8.71875 7.3125 9.03125L12 13.6875L16.6562 9.03125C16.9375 8.71875 17.4062 8.71875 17.6875 9.03125C18 9.3125 18 9.78125 17.6875 10.0625L12.4375 15.3125C12.3125 15.4375 12.1562 15.5 12 15.5Z\" fill=\"currentColor\"/>\n</svg>`\n};\n\nexport class CourierIcon extends CourierBaseElement {\n\n  static get id(): string {\n    return 'courier-icon';\n  }\n\n  // State\n  private _color?: string;\n  private _svg?: string;\n  private _size?: string;\n\n  // Components\n  private _iconContainer: HTMLElement;\n  private _style: HTMLStyleElement;\n\n  constructor(color?: string, svg?: string, size?: string) {\n    super();\n\n    // Set initial values from constructor\n    this._color = color ?? CourierColors.black[500];\n    this._svg = svg;\n    this._size = size ?? '24px';\n\n    // Create components\n    const shadow = this.attachShadow({ mode: 'open' });\n    this._iconContainer = document.createElement('div');\n    shadow.appendChild(this._iconContainer);\n\n    // Add styles\n    this._style = document.createElement('style');\n    this._style.textContent = this.getStyles();\n    shadow.appendChild(this._style);\n\n    // Refresh\n    this.refresh();\n  }\n\n  private getStyles(): string {\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: ${this._size};\n        height: ${this._size};\n        color: ${this._color};\n      }\n    `;\n  }\n\n  private refresh() {\n    if (this._svg) {\n      this._iconContainer.innerHTML = this._svg;\n    }\n    this._style.textContent = this.getStyles();\n  }\n\n  public updateColor(color: string) {\n    this._color = color;\n    this.refresh();\n  }\n\n  public updateSVG(svg: string) {\n    this._svg = svg;\n    this.refresh();\n  }\n\n  public updateSize(size: string) {\n    this._size = size;\n    this.refresh();\n  }\n}\n","import { theme } from \"../utils/theme\";\nimport { CourierBaseElement } from \"./courier-base-element\";\n\nexport class CourierLink extends CourierBaseElement {\n\n  static get id(): string {\n    return 'courier-link';\n  }\n\n  private link: HTMLAnchorElement;\n  static observedAttributes = [\n    'href',\n    'variant',\n    'disabled',\n    'color',\n    'underline',\n    'mode',\n    'target',\n    'font-family',\n    'font-size'\n  ];\n\n  constructor() {\n    super();\n    const shadow = this.attachShadow({ mode: 'open' });\n\n    this.link = document.createElement('a');\n    this.link.setAttribute('part', 'link');\n\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\n    shadow.appendChild(style);\n    shadow.appendChild(this.link);\n\n    this.updateVariant();\n    this.updateUnderline();\n    this.updateMode();\n  }\n\n  connectedCallback() {\n    const slot = document.createElement('slot');\n    this.link.appendChild(slot);\n    this.updateHref();\n  }\n\n  attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n    if (oldValue === newValue) return;\n\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\n  private updateHref() {\n    const href = this.getAttribute('href');\n    if (href) {\n      this.link.href = href;\n    }\n  }\n\n  private 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\n  private 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\n  private updateUnderline() {\n    const underline = this.getAttribute('underline') === 'true';\n    this.link.setAttribute('data-underline', underline.toString());\n  }\n\n  private updateMode() {\n    const mode = this.getAttribute('mode') || 'light';\n    this.link.setAttribute('data-mode', mode);\n  }\n\n  private updateTarget() {\n    const target = this.getAttribute('target');\n    if (target) {\n      this.link.target = target;\n    }\n  }\n\n  private 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\n  private 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","import { CourierSystemThemeElement } from \"./courier-system-theme-element\";\n\nexport class CourierFactoryElement extends CourierSystemThemeElement {\n\n  constructor() {\n    super();\n  }\n\n  // Build the element with a factory function\n  public build(newElement: HTMLElement | undefined | null) {\n    if (newElement === null) {\n      this.replaceChildren();\n      return;\n    }\n    const element = newElement ?? this.defaultElement();\n    \n    // If element is a React root container, ensure it's transparent\n    if (element.hasAttribute('data-react-root')) {\n      element.style.display = 'contents';\n    }\n    \n    this.replaceChildren(element);\n  }\n\n  // Default element to be used if no factory is provided\n  public defaultElement(): HTMLElement {\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\n}","import { CourierFactoryElement } from \"./courier-element\";\nimport { CourierButton, CourierButtonProps, CourierButtonVariants } from \"./courier-button\";\nimport { SystemThemeMode } from \"../utils/system-theme-mode\";\n\nexport type CourierInfoStateProps = {\n  title?: {\n    text?: string,\n    textColor?: string,\n    fontSize?: string,\n    fontWeight?: string,\n    fontFamily?: string\n  };\n  button: CourierButtonProps;\n};\n\nexport class CourierInfoState extends CourierFactoryElement {\n\n  static get id(): string {\n    return 'courier-info-state';\n  }\n\n  // Props\n  private _props: CourierInfoStateProps;\n\n  // Components\n  private _title?: HTMLElement;\n  private _button?: CourierButton;\n  private _style?: HTMLStyleElement;\n\n  constructor(props: CourierInfoStateProps) {\n    super();\n    this._props = props;\n  }\n\n  defaultElement(): HTMLElement {\n    const container = document.createElement('div');\n\n    // Title\n    this._title = document.createElement('h2');\n    if (this._props.title?.text) {\n      this._title.textContent = this._props.title.text;\n    }\n\n    // Button\n    this._button = new CourierButton(this._props.button ?? CourierButtonVariants.secondary(this.currentSystemTheme));\n\n    this._style = document.createElement('style');\n    this._style.textContent = this.getStyles(this._props);\n\n    container.className = 'container';\n    container.appendChild(this._style);\n    container.appendChild(this._title);\n    container.appendChild(this._button);\n    this.appendChild(container);\n\n    return container;\n  }\n\n  protected onSystemThemeChange(_: SystemThemeMode) {\n    this.updateStyles(this._props);\n  }\n\n  private getStyles(props: CourierInfoStateProps): string {\n\n    // NOTE: These styles are injected into the light DOM (this component does not use\n    // Shadow DOM), so every selector must be scoped to this element's tag name. A bare\n    // `.container` selector would leak globally and clobber host-app styles. `:host` does\n    // not match anything outside of a shadow root, so the element itself is targeted by tag.\n    const id = CourierInfoState.id;\n\n    return `\n      ${id} {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        height: 100%;\n        width: 100%;\n      }\n\n      ${id} .container {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        gap: 16px;\n        text-align: center;\n        padding: 24px;\n        box-sizing: border-box;\n        width: 100%;\n        height: 100%;\n      }\n\n      ${id} .container h2 {\n        margin: 0;\n        color: ${props.title?.textColor ?? 'red'};\n        font-size: ${props.title?.fontSize ?? '16px'};\n        font-weight: ${props.title?.fontWeight ?? '500'};\n        font-family: ${props.title?.fontFamily ?? 'inherit'};\n      }\n    `;\n  }\n\n  public updateStyles(props: CourierInfoStateProps) {\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\n}\n","import { CourierBaseElement } from \"./courier-base-element\";\nimport { CourierIcon } from \"./courier-icon\";\n\nexport class CourierIconButton extends CourierBaseElement {\n\n  static get id(): string {\n    return 'courier-icon-button';\n  }\n\n  // State\n  private _backgroundColor?: string;\n  private _hoverBackgroundColor?: string;\n  private _activeBackgroundColor?: string;\n  private _borderRadius?: string;\n  private _height?: string;\n  private _width?: string;\n\n  // Elements\n  private _style: HTMLStyleElement;\n  private _button: HTMLButtonElement;\n  private _icon: CourierIcon;\n\n  constructor(svg?: string, color?: string, backgroundColor?: string, hoverBackgroundColor?: string, activeBackgroundColor?: string, borderRadius?: string, height?: string, width?: string, iconSize?: string) {\n    super();\n\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\n    const shadow = this.attachShadow({ mode: 'open' });\n\n    this._button = document.createElement('button');\n    this._button.setAttribute('part', 'button');\n    this._icon = new CourierIcon(color, svg, iconSize);\n\n    this._style = document.createElement('style');\n    this.refresh();\n\n    shadow.appendChild(this._style);\n    this._button.appendChild(this._icon);\n    shadow.appendChild(this._button);\n  }\n\n  private refresh() {\n    this._style.textContent = this.getStyles();\n  }\n\n  private getStyles(): string {\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\n  updateIconColor(color: string) {\n    this._icon.updateColor(color);\n  }\n\n  updateIconSVG(svg: string) {\n    this._icon.updateSVG(svg);\n  }\n\n  updateBackgroundColor(color: string) {\n    this._backgroundColor = color;\n    this.refresh();\n  }\n\n  updateHoverBackgroundColor(color: string) {\n    this._hoverBackgroundColor = color;\n    this.refresh();\n  }\n\n  updateActiveBackgroundColor(color: string) {\n    this._activeBackgroundColor = color;\n    this.refresh();\n  }\n\n  updateIconSize(size: string) {\n    this._icon.updateSize(size);\n  }\n\n}\n","export function registerElement(element: CustomElementConstructor & { id: string }) {\n  if (typeof window !== 'undefined' && !customElements.get(element.id)) {\n    customElements.define(element.id, element);\n  }\n}\n\nexport function injectGlobalStyle(styleId: string, styles: string): HTMLStyleElement {\n  // Inject component-scoped styles just once per document\n  const selector = `style[data-${styleId}]`;\n  const existingStyle = document.querySelector(selector) as HTMLStyleElement;\n\n  if (!existingStyle) {\n    const style = document.createElement('style');\n    style.setAttribute(`data-${styleId}`, '');\n    style.textContent = styles;\n    document.head.appendChild(style);\n    return style;\n  }\n\n  return existingStyle;\n}","import { CourierBaseElement } from './courier-base-element';\nimport { registerElement, injectGlobalStyle } from '../utils/registeration';\nimport { COURIER_DEFAULT_PRIMARY_COLOR } from '../utils/courier-colors';\n\nconst STYLE_ID = 'courier-radio';\n\nconst STYLES = `\n  courier-radio {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    width: 16px;\n    height: 16px;\n    line-height: 0;\n  }\n  courier-radio .courier-radio {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    width: 16px;\n    height: 16px;\n    line-height: 0;\n    transition: all 150ms ease;\n  }\n  courier-radio .courier-radio svg {\n    display: block;\n  }\n  courier-radio .courier-radio-ring {\n    transition: stroke 150ms ease;\n  }\n  courier-radio .courier-radio-dot {\n    opacity: 0;\n    transform: scale(0.5);\n    transform-origin: center;\n    transform-box: fill-box;\n    transition:\n      opacity 200ms cubic-bezier(0.2, 0, 0.13, 1.5),\n      transform 200ms cubic-bezier(0.2, 0, 0.13, 1.5);\n  }\n  courier-radio .courier-radio[aria-checked=\"true\"] .courier-radio-dot {\n    opacity: 1;\n    transform: scale(1);\n  }\n`;\n\nconst DEFAULT_RING_COLOR = '#D4D4D4';\nconst DEFAULT_CHECKED_COLOR = COURIER_DEFAULT_PRIMARY_COLOR;\n\n/**\n * Themeable radio indicator (visual only; no native input).\n *\n * Renders a 16x16 SVG matching the Courier preferences page design with\n * overshoot animation on selection. Toggle via the `checked` property.\n *\n * @public\n */\nexport class CourierRadio extends CourierBaseElement {\n  static get id(): string {\n    return 'courier-radio';\n  }\n\n  private _checked = false;\n  private _ringColor = DEFAULT_RING_COLOR;\n  private _checkedColor = DEFAULT_CHECKED_COLOR;\n\n  private _rootEl?: HTMLSpanElement;\n  private _ringEl?: SVGCircleElement;\n  private _dotEl?: SVGCircleElement;\n  private _mounted = false;\n\n  set checked(val: boolean) {\n    this._checked = val;\n    this._applyState();\n  }\n\n  get checked(): boolean {\n    return this._checked;\n  }\n\n  set ringColor(val: string) {\n    this._ringColor = val || DEFAULT_RING_COLOR;\n    this._applyState();\n  }\n\n  set checkedColor(val: string) {\n    this._checkedColor = val || DEFAULT_CHECKED_COLOR;\n    this._applyState();\n  }\n\n  protected onComponentMounted(): void {\n    injectGlobalStyle(STYLE_ID, STYLES);\n    this._build();\n    this._mounted = true;\n  }\n\n  protected onComponentUnmounted(): void {\n    this._mounted = false;\n    this._rootEl = undefined;\n    this._ringEl = undefined;\n    this._dotEl = undefined;\n  }\n\n  private _build() {\n    this.innerHTML = '';\n\n    const root = document.createElement('span');\n    root.className = 'courier-radio';\n    root.setAttribute('role', 'radio');\n\n    const svgNS = 'http://www.w3.org/2000/svg';\n    const svg = document.createElementNS(svgNS, 'svg');\n    svg.setAttribute('width', '16');\n    svg.setAttribute('height', '16');\n    svg.setAttribute('viewBox', '0 0 16 16');\n    svg.setAttribute('fill', 'none');\n\n    const ring = document.createElementNS(svgNS, 'circle');\n    ring.setAttribute('cx', '8');\n    ring.setAttribute('cy', '8');\n    ring.setAttribute('r', '7');\n    ring.setAttribute('stroke-width', '1.5');\n    ring.setAttribute('fill', 'none');\n    ring.setAttribute('class', 'courier-radio-ring');\n    svg.appendChild(ring);\n\n    const dot = document.createElementNS(svgNS, 'circle');\n    dot.setAttribute('cx', '8');\n    dot.setAttribute('cy', '8');\n    dot.setAttribute('r', '4');\n    dot.setAttribute('class', 'courier-radio-dot');\n    svg.appendChild(dot);\n\n    root.appendChild(svg);\n    this.appendChild(root);\n\n    this._rootEl = root;\n    this._ringEl = ring;\n    this._dotEl = dot;\n\n    this._applyState();\n  }\n\n  private _applyState() {\n    if (!this._mounted || !this._rootEl || !this._ringEl || !this._dotEl) return;\n    this._rootEl.setAttribute('aria-checked', String(this._checked));\n    this._ringEl.setAttribute('stroke', this._checked ? this._checkedColor : this._ringColor);\n    this._dotEl.setAttribute('fill', this._checkedColor);\n  }\n}\n\nregisterElement(CourierRadio);\n","import { CourierBaseElement } from './courier-base-element';\nimport { registerElement, injectGlobalStyle } from '../utils/registeration';\nimport { isDarkColor, COURIER_DEFAULT_PRIMARY_COLOR } from '../utils/courier-colors';\n\nconst STYLE_ID = 'courier-checkbox';\n\nconst STYLES = `\n  courier-checkbox {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    width: 16px;\n    height: 16px;\n    line-height: 0;\n  }\n  courier-checkbox .courier-checkbox {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    width: 16px;\n    height: 16px;\n    border-radius: 4px;\n    border-style: solid;\n    border-width: 1.5px;\n    background-color: transparent;\n    box-sizing: border-box;\n    transition: background-color 150ms ease, border-color 150ms ease;\n  }\n  courier-checkbox .courier-checkbox[aria-disabled=\"true\"] {\n    opacity: 0.5;\n    cursor: not-allowed;\n  }\n  courier-checkbox .courier-checkbox-mark {\n    display: block;\n    width: 10px;\n    height: 10px;\n    opacity: 0;\n    transform: scale(0.5);\n    transform-origin: center;\n    transform-box: fill-box;\n    transition:\n      opacity 200ms cubic-bezier(0.2, 0, 0.13, 1.5),\n      transform 200ms cubic-bezier(0.2, 0, 0.13, 1.5);\n  }\n  courier-checkbox .courier-checkbox[aria-checked=\"true\"] .courier-checkbox-mark {\n    opacity: 1;\n    transform: scale(1);\n  }\n`;\n\nconst CHECK_PATH = 'M13.8125 3.3125C14.2188 3.6875 14.2188 4.34375 13.8125 4.71875L5.8125 12.7188C5.4375 13.125 4.78125 13.125 4.40625 12.7188L0.40625 8.71875C0 8.34375 0 7.6875 0.40625 7.3125C0.78125 6.90625 1.4375 6.90625 1.8125 7.3125L5.125 10.5938L12.4062 3.3125C12.7812 2.90625 13.4375 2.90625 13.8125 3.3125Z';\n\nconst DEFAULT_BORDER_COLOR = '#D4D4D4';\nconst DEFAULT_CHECKED_COLOR = COURIER_DEFAULT_PRIMARY_COLOR;\nconst DEFAULT_CHECKMARK_COLOR = '#FFFFFF';\n\n/**\n * Themeable checkbox indicator (visual only; no native input).\n *\n * Renders a 16x16 box with an animated checkmark matching the Courier\n * preferences page design. Toggle via the `checked` property.\n *\n * @public\n */\nexport class CourierCheckbox extends CourierBaseElement {\n  static get id(): string {\n    return 'courier-checkbox';\n  }\n\n  private _checked = false;\n  private _disabled = false;\n  private _checkedColor = DEFAULT_CHECKED_COLOR;\n\n  private _rootEl?: HTMLSpanElement;\n  private _markPathEl?: SVGPathElement;\n  private _mounted = false;\n\n  set checked(val: boolean) {\n    this._checked = val;\n    this._applyState();\n  }\n\n  get checked(): boolean {\n    return this._checked;\n  }\n\n  set disabled(val: boolean) {\n    this._disabled = val;\n    this._applyState();\n  }\n\n  set checkedColor(val: string) {\n    this._checkedColor = val || DEFAULT_CHECKED_COLOR;\n    this._applyState();\n  }\n\n  protected onComponentMounted(): void {\n    injectGlobalStyle(STYLE_ID, STYLES);\n    this._build();\n    this._mounted = true;\n  }\n\n  protected onComponentUnmounted(): void {\n    this._mounted = false;\n    this._rootEl = undefined;\n    this._markPathEl = undefined;\n  }\n\n  private _build() {\n    this.innerHTML = '';\n\n    const root = document.createElement('span');\n    root.className = 'courier-checkbox';\n    root.setAttribute('role', 'checkbox');\n\n    const svgNS = 'http://www.w3.org/2000/svg';\n    const svg = document.createElementNS(svgNS, 'svg');\n    svg.setAttribute('class', 'courier-checkbox-mark');\n    svg.setAttribute('viewBox', '0 0 15 16');\n    svg.setAttribute('fill', 'none');\n\n    const path = document.createElementNS(svgNS, 'path');\n    path.setAttribute('d', CHECK_PATH);\n    svg.appendChild(path);\n    root.appendChild(svg);\n    this.appendChild(root);\n\n    this._rootEl = root;\n    this._markPathEl = path;\n\n    this._applyState();\n  }\n\n  private _applyState() {\n    if (!this._mounted || !this._rootEl || !this._markPathEl) return;\n    this._rootEl.setAttribute('aria-checked', String(this._checked));\n    this._rootEl.setAttribute('aria-disabled', String(this._disabled));\n    this._rootEl.style.borderColor = this._checked ? this._checkedColor : DEFAULT_BORDER_COLOR;\n    this._rootEl.style.backgroundColor = this._checked ? this._checkedColor : 'transparent';\n    this._markPathEl.setAttribute('fill', isDarkColor(this._checkedColor) ? DEFAULT_CHECKMARK_COLOR : '#171717');\n  }\n}\n\nregisterElement(CourierCheckbox);\n","import { CourierButtonProps, TRANSPARENT_BORDER } from \"../components/courier-button\";\nimport { CourierColors, isDarkColor } from \"./courier-colors\";\n\n/**\n * The styling an Elemental `action` element can carry.\n *\n * Declared structurally rather than imported from `@trycourier/courier-js` so the core kit\n * stays free of a dependency on the data SDK. `InboxAction` satisfies it.\n */\nexport interface CourierActionStyle {\n  background_color?: string;\n  border_radius?: string;\n  border_size?: string;\n  font_size?: string;\n  padding?: string;\n  style?: string;\n  color?: string;\n  border?: {\n    enabled?: boolean;\n    color?: string;\n    radius?: string | number;\n    size?: string;\n  };\n}\n\n/**\n * The theme values that describe one action look.\n *\n * @public\n */\nexport interface CourierActionVariantThemeStyle {\n  backgroundColor?: string;\n  hoverBackgroundColor?: string;\n  activeBackgroundColor?: string;\n  border?: string;\n  borderRadius?: string;\n  shadow?: string;\n  textDecoration?: string;\n  padding?: string;\n  font?: {\n    family?: string;\n    size?: string;\n    weight?: string;\n    color?: string;\n  };\n}\n\n/**\n * The theme values an integrator can set for a row of message actions.\n *\n * The top level applies to every action. Below it sits one block per `action.style`, each named\n * for the value it answers to — a theme reads the same as the template that feeds it, with no\n * mapping to remember between what a template sends and what a theme calls it. A block layers\n * over the top level, and an action's own Elemental styling still supersedes both.\n *\n * @public\n */\nexport interface CourierActionThemeStyle extends CourierActionVariantThemeStyle {\n  /** Applies to `style: 'button'` — the filled button, and the default when a style is absent. */\n  button?: CourierActionVariantThemeStyle;\n  /** Applies to `style: 'secondary'` — the outlined button. */\n  secondary?: CourierActionVariantThemeStyle;\n  /** Applies to `style: 'tertiary'` — the borderless button. */\n  tertiary?: CourierActionVariantThemeStyle;\n  /** Applies to `style: 'link'` — inline text rather than a button. */\n  link?: CourierActionVariantThemeStyle;\n}\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;\n\n/**\n * A color the browser can actually paint with.\n *\n * The send pipeline fills an action's `background_color` with `{brand.colors.primary}` whenever\n * the template names none, and that token only becomes a color if a brand is configured and\n * resolves. When it does not, the literal string arrives here — and being neither empty nor a\n * color, it read as an accent the author had chosen. `secondary` built\n * `1px solid {brand.colors.primary}` out of it, the browser dropped the declaration as invalid,\n * and the button lost both its outline and its label color: an unstyled ghost where an outlined\n * button belonged.\n *\n * An unresolved token is the absence of a color, so it is treated as one and the look falls back\n * to the kit's own defaults — which is what the template designer previews.\n */\nfunction usableColor(value?: string): string | undefined {\n  if (!value) return undefined;\n  const trimmed = value.trim();\n  // Any leftover interpolation — `{brand.colors.primary}`, `{{var}}` — that never resolved.\n  return trimmed === '' || trimmed.includes('{') || trimmed.includes('}') ? undefined : trimmed;\n}\n\n/** The white background the template designer sends to mean \"this button is outlined\". */\nconst DESIGNER_OUTLINED_FILLS = new Set(['#ffffff', '#fff', 'white']);\n\nfunction isDesignerOutlinedFill(backgroundColor?: string): boolean {\n  return DESIGNER_OUTLINED_FILLS.has((backgroundColor ?? '').trim().toLowerCase());\n}\n\nfunction toCssLength(value: string | number | undefined): string | undefined {\n  if (value === undefined || value === null || value === '') {\n    return undefined;\n  }\n  if (typeof value === 'number') {\n    return `${value}px`;\n  }\n  // Templates written before the flat border fields stored bare pixel counts as strings.\n  return /^-?\\d+(\\.\\d+)?$/.test(value) ? `${value}px` : value;\n}\n\n/**\n * Pick light or dark text for a background color, whichever stays readable on it.\n *\n * Elemental has no text color on actions, so a template that sets a dark fill would otherwise\n * render dark-on-dark. Only hex is understood; anything else returns `undefined` so the caller\n * falls back to the theme.\n */\nexport function readableTextColor(backgroundColor?: string): string | undefined {\n  if (!backgroundColor || !HEX_COLOR.test(backgroundColor.trim())) {\n    return undefined;\n  }\n\n  return isDarkColor(backgroundColor) ? CourierColors.white[500] : CourierColors.black[500];\n}\n\n/**\n * Resolve the button styling for a message action.\n *\n * Precedence is the usual one: a value the integrator set on the theme wins; failing that the\n * action's own Elemental styling applies, so an untouched theme renders what the template author\n * configured; failing both, the value is left unset and `CourierButton` supplies its default.\n *\n * That ordering is what makes a theme an override rather than a suggestion — set\n * `actions.backgroundColor` and every action wears it, whatever colour the template asked for.\n * It also means the default theme deliberately says nothing about actions: a default living\n * there would outrank the template and there would be no way to tell it apart from a value the\n * integrator chose.\n */\nexport function courierActionButtonProps(\n  action: CourierActionStyle,\n  theme?: CourierActionThemeStyle\n): Partial<CourierButtonProps> {\n\n  // Nothing validates `style` in transit and its casing is preserved as sent, so match loosely\n  // rather than assume the sender normalized it. An unrecognized value falls through to the\n  // plain button rather than stranding the action between looks.\n  const style = action.style?.trim().toLowerCase();\n  // The template designer used to have no way to say \"outlined\": the content API accepted only\n  // `button` and `link`, so it encoded an outlined inbox button as `style: \"link\"` carrying a\n  // white background and a black label, and read that pair back as outlined on the way in. The\n  // label color is dropped before delivery, which leaves the white background as the only\n  // surviving marker of what the author actually chose.\n  //\n  // Rendering that as a link would show an underlined phrase where the author configured a\n  // button, so it is treated as the outlined look with no color of its own. Narrow on purpose —\n  // a link an author wrote by hand arrives with a real color, since the send pipeline\n  // substitutes the brand's primary when a template names none. The bridge is for templates\n  // already saved that way; the designer says `secondary` now.\n  const designerOutlined = style === 'link' && isDesignerOutlinedFill(action.background_color);\n\n  const isLink = style === 'link' && !designerOutlined;\n  const outlined = style === 'secondary' || designerOutlined;\n  // The loudest of the three: a solid fill in the mode's ink, for the action that is the thing\n  // to do on the message.\n  const solid = style === 'tertiary';\n\n  // The block is picked by the style's own name, so a theme and a template speak the same\n  // vocabulary. An unrecognized style falls through to `button`, matching how it renders.\n  const variantTheme = isLink\n    ? theme?.link\n    : outlined\n      ? theme?.secondary\n      : solid\n        ? theme?.tertiary\n        : theme?.button;\n\n  // Typography carries across the whole row, so a font set at the top level applies to every\n  // style and the block only refines it. The rest of the base layers in for the buttons but not\n  // for a link, since inheriting a fill or a border would put button chrome on something that\n  // should read as text.\n  const font = { ...theme?.font, ...variantTheme?.font };\n  const t: CourierActionVariantThemeStyle = isLink\n    ? { ...variantTheme, font }\n    : { ...theme, ...variantTheme, font };\n\n  // A link is not a button wearing different colors — none of the button chrome applies to it.\n  if (isLink) {\n    return {\n      variant: 'link',\n      backgroundColor: t.backgroundColor,\n      hoverBackgroundColor: t.hoverBackgroundColor,\n      activeBackgroundColor: t.activeBackgroundColor,\n      border: t.border,\n      borderRadius: t.borderRadius,\n      shadow: t.shadow,\n      textDecoration: t.textDecoration,\n      fontFamily: t.font?.family,\n      fontSize: t.font?.size ?? toCssLength(action.font_size),\n      fontWeight: t.font?.weight,\n      textColor: t.font?.color ?? usableColor(action.color),\n      padding: t.padding ?? action.padding\n    };\n  }\n\n  // The designer's white background is a marker, not a color the author picked, so it must not\n  // become the outline or the label. Dropping it here leaves the button on the kit's own\n  // outlined defaults, which are mode-aware — the marker carries no color that would survive a\n  // dark surface anyway.\n  const fill = designerOutlined ? undefined : usableColor(action.background_color);\n  const borderSize = toCssLength(action.border_size ?? action.border?.size);\n\n  // The legacy nested border is the only way an action can ask for an outline color of its own;\n  // it only counts as a border when it says how thick it is, or says it is enabled.\n  const legacyBorderColor = usableColor(action.border?.color);\n  const legacyBorder = legacyBorderColor && (borderSize || action.border?.enabled)\n    ? `${borderSize ?? '1px'} solid ${legacyBorderColor}`\n    : undefined;\n\n  // For the outlined look the action's color becomes the outline and the label rather than a\n  // fill. This mirrors how the same action renders in email, the only place the style is given\n  // a meaning.\n  const actionBorder = outlined && fill ? `${borderSize ?? '1px'} solid ${fill}` : legacyBorder;\n\n  // A button that draws no outline of its own still reserves the border box, so it lines up with\n  // an outlined sibling in the same row.\n  const ownLook = Boolean(fill || actionBorder);\n\n  // Three weights, loudest last. `secondary` is the plain button an action has always rendered\n  // as — transparent over the row, edged with the divider hairline — and it stays the default\n  // so an action naming no style looks exactly as it did. `outlined` gives that edge something\n  // you can see. `primary` is the solid fill, for the action that is the thing to do.\n  //\n  // `outlined` exists rather than `secondary` being redefined because `secondary` is a public\n  // variant with its own users: an outline is what an action asks for, not a new meaning for\n  // everyone else's button.\n  return {\n    variant: outlined ? 'secondary' : solid ? 'tertiary' : 'primary',\n    // The two quiet looks rest on transparent, not on the mode's surface. The list item is\n    // transparent itself, so an action painted with an opaque face becomes a white chip on an\n    // integrator's own background instead of sitting on it — which is what the default theme\n    // did before these styles existed, and what it has to keep doing. The solid one is the\n    // exception: an ink fill is the whole point of it.\n    backgroundColor: solid\n      ? (t.backgroundColor ?? fill)\n      : outlined\n        ? (t.backgroundColor ?? 'transparent')\n        : (t.backgroundColor ?? fill ?? 'transparent'),\n    hoverBackgroundColor: t.hoverBackgroundColor,\n    activeBackgroundColor: t.activeBackgroundColor,\n    border: t.border ?? actionBorder ?? (fill ? TRANSPARENT_BORDER : undefined),\n    borderRadius: t.borderRadius ?? toCssLength(action.border_radius ?? action.border?.radius),\n    shadow: t.shadow ?? (ownLook ? 'none' : undefined),\n    textDecoration: t.textDecoration,\n    fontFamily: t.font?.family,\n    fontSize: t.font?.size ?? toCssLength(action.font_size),\n    fontWeight: t.font?.weight,\n    textColor: t.font?.color ?? usableColor(action.color) ?? (outlined ? fill : readableTextColor(fill)),\n    padding: t.padding ?? action.padding\n  };\n}\n","import { CourierComponentThemeMode, SystemThemeMode, addSystemThemeModeListener, getSystemThemeMode } from \"../utils/system-theme-mode\";\n\nexport interface CourierThemeSubscription<TTheme> {\n  manager: CourierThemeManager<TTheme>;\n  unsubscribe: () => void;\n}\n\n/**\n * Abstract base class for theme management in Courier UI packages.\n *\n * This class provides:\n * - Light/dark theme switching\n * - System theme detection and auto-switching\n * - Theme subscription/notification system\n * - User mode override (light, dark, or system)\n *\n * Subclasses must implement:\n * - getDefaultLightTheme(): return the default light theme\n * - getDefaultDarkTheme(): return the default dark theme\n * - mergeTheme(): merge user theme with defaults\n */\nexport abstract class CourierThemeManager<TTheme> {\n\n  // Abstract properties and methods that subclasses must implement\n  protected abstract readonly THEME_CHANGE_EVENT: string;\n  protected abstract getDefaultLightTheme(): TTheme;\n  protected abstract getDefaultDarkTheme(): TTheme;\n  protected abstract mergeTheme(mode: SystemThemeMode, theme: TTheme): TTheme;\n\n  // State (protected so subclasses can access if needed)\n  protected _theme: TTheme;\n  protected _lightTheme!: TTheme;\n  protected _darkTheme!: TTheme;\n  protected _target: EventTarget;\n  protected _subscriptions: CourierThemeSubscription<TTheme>[] = [];\n\n  // System theme\n  protected _userMode: CourierComponentThemeMode;\n  protected _systemMode: SystemThemeMode;\n  protected _systemThemeCleanup: (() => void) | undefined;\n\n  constructor(initialTheme: TTheme) {\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(this.getDefaultLightTheme());\n    this.setDarkTheme(this.getDefaultDarkTheme());\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   * Set the light theme\n   */\n  public setLightTheme(theme: TTheme) {\n    this._lightTheme = theme;\n    if (this._systemMode === 'light') {\n      this.updateTheme();\n    }\n  }\n\n  /**\n   * Set the dark theme\n   */\n  public setDarkTheme(theme: TTheme) {\n    this._darkTheme = theme;\n    if (this._systemMode === 'dark') {\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(): TTheme {\n    return this._theme;\n  }\n\n  /**\n   * Update the theme based on current mode\n   */\n  protected updateTheme() {\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 = this.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: TTheme) {\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   * Get the current mode\n   */\n  public get mode(): CourierComponentThemeMode {\n    return this._userMode;\n  }\n\n  /**\n   * Subscribe to theme changes\n   * @param callback - Function to run when the theme changes\n   * @returns - Object with unsubscribe method to stop listening\n   */\n  public subscribe(callback: (theme: TTheme) => void): CourierThemeSubscription<TTheme> {\n    const controller = new AbortController();\n    this._target.addEventListener(this.THEME_CHANGE_EVENT, ((e: Event) => {\n      callback((e as CustomEvent<{ theme: TTheme }>).detail.theme);\n    }) as EventListener, { signal: controller.signal });\n\n    const subscription: CourierThemeSubscription<TTheme> = {\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}\n","// Import core UI components\nimport { CourierButton } from './components/courier-button';\nimport { CourierIcon } from './components/courier-icon';\nimport { CourierLink } from './components/courier-link';\nimport { CourierInfoState } from './components/courier-info-state';\nimport { CourierIconButton } from './components/courier-icon-button';\nimport { CourierSystemThemeElement } from './components/courier-system-theme-element';\nimport { CourierRadio } from './components/courier-radio';\nimport { CourierCheckbox } from './components/courier-checkbox';\nimport { registerElement } from './utils/registeration';\n\n// Export all components for external use\nexport * from './components/courier-button';\nexport * from './components/courier-icon';\nexport * from './components/courier-link';\nexport * from './components/courier-info-state';\nexport * from './components/courier-icon-button';\nexport * from './components/courier-element';\nexport * from './components/courier-system-theme-element';\nexport * from './components/courier-base-element';\nexport * from './components/courier-radio';\nexport * from './components/courier-checkbox';\nexport * from './utils/action-styles';\nexport * from './utils/system-theme-mode';\nexport * from './utils/theme';\nexport * from './utils/courier-colors';\nexport * from './utils/registeration';\n\n// Export theme management\nexport * from './managers/courier-theme-manager';\nexport * from './types/common-theme-types';\n\n// Register core UI components\nregisterElement(CourierButton);\nregisterElement(CourierIcon);\nregisterElement(CourierLink);\nregisterElement(CourierInfoState);\nregisterElement(CourierIconButton);\nregisterElement(CourierSystemThemeElement);\nregisterElement(CourierRadio);\nregisterElement(CourierCheckbox);"],"names":["STYLE_ID","STYLES","DEFAULT_CHECKED_COLOR","theme"],"mappings":"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"}