{"version":3,"sources":["../src/social/types.ts","../src/shared/auth-bridge.ts","../src/social/web-component.ts"],"names":[],"mappings":"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","file":"social-web-component.mjs","sourcesContent":["/**\n * Theming props for the Social Widget.\n * These map to CSS custom properties used internally.\n */\nexport interface SocialThemingProps {\n  /** Container background color */\n  socialBackgroundColor?: string;\n  /** Primary text color */\n  socialTextColor?: string;\n  /** Secondary text color */\n  socialSecondaryTextColor?: string;\n  /** Border color */\n  socialBorderColor?: string;\n  /** Container border radius */\n  socialBorderRadius?: string;\n  /** Container padding */\n  socialPadding?: string;\n  /** Container box shadow */\n  socialShadow?: string;\n  /** Primary accent color */\n  socialPrimaryColor?: string;\n  /** Primary hover color */\n  socialPrimaryHover?: string;\n  /** Card background */\n  socialCardBg?: string;\n  /** Card border */\n  socialCardBorder?: string;\n  /** Card border radius */\n  socialCardRadius?: string;\n  /** Card box shadow */\n  socialCardShadow?: string;\n  /** Card hover shadow */\n  socialCardHoverShadow?: string;\n  /** Avatar size */\n  socialAvatarSize?: string;\n  /** Avatar border radius */\n  socialAvatarRadius?: string;\n  /** Avatar border */\n  socialAvatarBorder?: string;\n  /** Post background */\n  socialPostBg?: string;\n  /** Post border radius */\n  socialPostBorderRadius?: string;\n  /** Post padding */\n  socialPostPadding?: string;\n  /** Grid gap */\n  socialGridGap?: string;\n  /** Grid item border radius */\n  socialGridRadius?: string;\n  /** Grid overlay background */\n  socialGridOverlayBg?: string;\n  /** Grid hover scale */\n  socialGridHoverScale?: string;\n  /** Image border radius */\n  socialImageRadius?: string;\n  /** Image border */\n  socialImageBorder?: string;\n  /** Button background */\n  socialButtonBg?: string;\n  /** Button hover background */\n  socialButtonHoverBg?: string;\n  /** Button text color */\n  socialButtonColor?: string;\n  /** Button border radius */\n  socialButtonRadius?: string;\n  /** Action button background */\n  socialActionBg?: string;\n  /** Action button hover background */\n  socialActionHoverBg?: string;\n  /** Action button active background */\n  socialActionActiveBg?: string;\n  /** Action button active text color */\n  socialActionActiveColor?: string;\n  /** Action button border radius */\n  socialActionRadius?: string;\n  /** Action icon size */\n  socialActionSize?: string;\n  /** Like color */\n  socialLikeColor?: string;\n  /** Like active background */\n  socialLikeActiveBg?: string;\n  /** Comment background */\n  socialCommentBg?: string;\n  /** Comment border */\n  socialCommentBorder?: string;\n  /** Comment border radius */\n  socialCommentRadius?: string;\n  /** Font family */\n  socialFontFamily?: string;\n  /** Username font size */\n  socialUsernameSize?: string;\n  /** Username font weight */\n  socialUsernameWeight?: string;\n  /** Timestamp font size */\n  socialTimestampSize?: string;\n  /** Body text font size */\n  socialBodySize?: string;\n  /** Meta text font size */\n  socialMetaSize?: string;\n  /** Divider color */\n  socialDividerColor?: string;\n  /** Create post card background */\n  socialCreateCardBg?: string;\n  /** Create post card border */\n  socialCreateCardBorder?: string;\n  /** Empty state icon color */\n  socialEmptyIconColor?: string;\n  /** Empty state text color */\n  socialEmptyTextColor?: string;\n  /** Transition duration */\n  socialTransitionDuration?: string;\n  /** Hover scale factor */\n  socialHoverScale?: string;\n  /** Loader spinner color */\n  socialLoaderColor?: string;\n}\n\n/**\n * Core configuration props for the Social Widget.\n */\nexport interface SocialWidgetProps extends SocialThemingProps {\n  /** Base URL of the Legion application (required) */\n  baseUrl: string;\n  /** JWT auth token for authenticated features */\n  authToken?: string;\n  /** Theme preset. Default: \"light\" */\n  theme?: \"light\" | \"dark\";\n  /** Layout mode. Default: \"feed\" */\n  layout?: \"feed\" | \"grid\";\n  /** Number of grid rows (grid layout only). Default: 3 */\n  rows?: number;\n  /** Number of grid columns (grid layout only). Default: 3 */\n  cols?: number;\n  /** URL for community page click-throughs (grid layout) */\n  communityUrl?: string;\n  /** Channel filter for social feed/grid */\n  channel?: string;\n  /** Widget width CSS value. Default: \"600px\" */\n  width?: string;\n  /** Widget height CSS value. Default: \"800px\" */\n  height?: string;\n  /** Additional CSS class name for the container */\n  className?: string;\n  /** Additional inline styles for the container */\n  style?: React.CSSProperties;\n  /** Callback when the widget iframe has loaded */\n  onLoad?: (detail: { widget: string; layout: string; theme: string }) => void;\n  /** Callback when the widget iframe fails to load */\n  onError?: (message: string) => void;\n}\n\n/**\n * Mapping from camelCase theming prop names to the kebab-case query\n * parameter names used by the social widget iframe URL.\n */\nexport const SOCIAL_THEMING_PROP_TO_PARAM: Record<\n  keyof SocialThemingProps,\n  string\n> = {\n  socialBackgroundColor: \"social-background-color\",\n  socialTextColor: \"social-text-color\",\n  socialSecondaryTextColor: \"social-secondary-text-color\",\n  socialBorderColor: \"social-border-color\",\n  socialBorderRadius: \"social-border-radius\",\n  socialPadding: \"social-padding\",\n  socialShadow: \"social-shadow\",\n  socialPrimaryColor: \"social-primary-color\",\n  socialPrimaryHover: \"social-primary-hover\",\n  socialCardBg: \"social-card-bg\",\n  socialCardBorder: \"social-card-border\",\n  socialCardRadius: \"social-card-radius\",\n  socialCardShadow: \"social-card-shadow\",\n  socialCardHoverShadow: \"social-card-hover-shadow\",\n  socialAvatarSize: \"social-avatar-size\",\n  socialAvatarRadius: \"social-avatar-radius\",\n  socialAvatarBorder: \"social-avatar-border\",\n  socialPostBg: \"social-post-bg\",\n  socialPostBorderRadius: \"social-post-border-radius\",\n  socialPostPadding: \"social-post-padding\",\n  socialGridGap: \"social-grid-gap\",\n  socialGridRadius: \"social-grid-radius\",\n  socialGridOverlayBg: \"social-grid-overlay-bg\",\n  socialGridHoverScale: \"social-grid-hover-scale\",\n  socialImageRadius: \"social-image-radius\",\n  socialImageBorder: \"social-image-border\",\n  socialButtonBg: \"social-button-bg\",\n  socialButtonHoverBg: \"social-button-hover-bg\",\n  socialButtonColor: \"social-button-color\",\n  socialButtonRadius: \"social-button-radius\",\n  socialActionBg: \"social-action-bg\",\n  socialActionHoverBg: \"social-action-hover-bg\",\n  socialActionActiveBg: \"social-action-active-bg\",\n  socialActionActiveColor: \"social-action-active-color\",\n  socialActionRadius: \"social-action-radius\",\n  socialActionSize: \"social-action-size\",\n  socialLikeColor: \"social-like-color\",\n  socialLikeActiveBg: \"social-like-active-bg\",\n  socialCommentBg: \"social-comment-bg\",\n  socialCommentBorder: \"social-comment-border\",\n  socialCommentRadius: \"social-comment-radius\",\n  socialFontFamily: \"social-font-family\",\n  socialUsernameSize: \"social-username-size\",\n  socialUsernameWeight: \"social-username-weight\",\n  socialTimestampSize: \"social-timestamp-size\",\n  socialBodySize: \"social-body-size\",\n  socialMetaSize: \"social-meta-size\",\n  socialDividerColor: \"social-divider-color\",\n  socialCreateCardBg: \"social-create-card-bg\",\n  socialCreateCardBorder: \"social-create-card-border\",\n  socialEmptyIconColor: \"social-empty-icon-color\",\n  socialEmptyTextColor: \"social-empty-text-color\",\n  socialTransitionDuration: \"social-transition-duration\",\n  socialHoverScale: \"social-hover-scale\",\n  socialLoaderColor: \"social-loader-color\",\n};\n\n","/**\n * Auth bridge for `<legion-*>` web components (plan §4.2, LEG-444).\n *\n * Wires three message paths around an iframe-backed widget:\n *\n *   parent page  --(window.postMessage 'legion:auth')-->  host component\n *   host         --(iframe.postMessage 'AUTH_TOKEN')---->  iframe\n *   iframe       --(window.postMessage 'legion:auth-expired')->  host component\n *                                                                      └─ re-emitted as\n *                                                                         CustomEvent('legion:auth-expired')\n *\n * Token sources, highest to lowest precedence:\n *   1. parent postMessage `{ type: \"legion:auth\", token }`\n *   2. `auth-token` attribute (canonical, plan §4.2)\n *   3. `api-key` attribute  (legacy alias, kept for backwards-compat)\n *\n * Parent → host messages are filtered against the comma-separated\n * `allowed-parent-origins` attribute. If unset, only `window.parent === self`\n * (top-level page) and same-origin parents are accepted.\n */\n\nexport interface AuthBridgeOptions {\n  /** Returns the live iframe element if mounted. */\n  iframeAccessor: () => HTMLIFrameElement | null;\n  /** Used as the targetOrigin when posting to the iframe. */\n  baseUrl: string;\n}\n\nexport interface AuthBridgeHandle {\n  /** Tear down listeners. Call from `disconnectedCallback`. */\n  detach(): void;\n  /** Push the current token to the iframe. Call after `iframe.onload`. */\n  postCurrentToken(): void;\n  /** Resolve the active token (parent override → auth-token → api-key). */\n  currentToken(): string | null;\n}\n\nconst AUTH_TOKEN_MESSAGE = \"AUTH_TOKEN\";\nconst PARENT_AUTH_MESSAGE = \"legion:auth\";\nconst IFRAME_EXPIRED_MESSAGE = \"legion:auth-expired\";\n\nfunction parseAllowedOrigins(host: HTMLElement): string[] {\n  const raw = host.getAttribute(\"allowed-parent-origins\") || \"\";\n  return raw\n    .split(\",\")\n    .map((s) => s.trim())\n    .filter(Boolean);\n}\n\nfunction isAllowedParentOrigin(host: HTMLElement, origin: string): boolean {\n  // Same-origin is always trusted.\n  if (origin === window.location.origin) return true;\n  const allowed = parseAllowedOrigins(host);\n  return allowed.includes(origin);\n}\n\nexport function attachAuthBridge(\n  host: HTMLElement,\n  opts: AuthBridgeOptions\n): AuthBridgeHandle {\n  // Token override pushed by the parent via postMessage. Wins over attrs.\n  let parentToken: string | null = null;\n\n  const currentToken = (): string | null => {\n    if (parentToken) return parentToken;\n    return host.getAttribute(\"auth-token\") || host.getAttribute(\"api-key\");\n  };\n\n  const postCurrentToken = (): void => {\n    const iframe = opts.iframeAccessor();\n    const token = currentToken();\n    if (!iframe || !iframe.contentWindow || !token) return;\n    iframe.contentWindow.postMessage(\n      { type: AUTH_TOKEN_MESSAGE, token },\n      opts.baseUrl\n    );\n  };\n\n  const onMessage = (event: MessageEvent): void => {\n    if (!event || typeof event.data !== \"object\" || event.data === null) {\n      return;\n    }\n    const data = event.data as { type?: unknown; token?: unknown };\n\n    // 1. Parent → host: token refresh.\n    if (data.type === PARENT_AUTH_MESSAGE) {\n      if (!isAllowedParentOrigin(host, event.origin)) return;\n      if (typeof data.token !== \"string\" || !data.token) return;\n      parentToken = data.token;\n      postCurrentToken();\n      return;\n    }\n\n    // 2. Iframe → host: token expired. The iframe is mounted in the\n    // shadow DOM; messages from it carry `event.source === iframe.contentWindow`.\n    if (data.type === IFRAME_EXPIRED_MESSAGE) {\n      const iframe = opts.iframeAccessor();\n      if (!iframe || event.source !== iframe.contentWindow) return;\n      host.dispatchEvent(\n        new CustomEvent(IFRAME_EXPIRED_MESSAGE, {\n          bubbles: true,\n          composed: true,\n        })\n      );\n    }\n  };\n\n  window.addEventListener(\"message\", onMessage);\n\n  return {\n    detach() {\n      window.removeEventListener(\"message\", onMessage);\n    },\n    postCurrentToken,\n    currentToken,\n  };\n}\n\n/** Attribute names the bridge cares about; widgets must add these to `observedAttributes`. */\nexport const AUTH_BRIDGE_OBSERVED_ATTRS = [\n  \"auth-token\",\n  \"api-key\",\n  \"allowed-parent-origins\",\n] as const;\n","/**\n * Web Component entry point for the Social widget.\n *\n * Importing this module registers the <legion-social> custom element\n * so it can be used in any HTML page or framework that supports web components.\n *\n * @example\n * ```ts\n * import '@legionhandtech/lht-react-widgets/social-web-component';\n *\n * // Then use in HTML:\n * // <legion-social api-url=\"https://your-domain.com\" layout=\"feed\" />\n * ```\n */\n\nimport { SOCIAL_THEMING_PROP_TO_PARAM } from \"./types\";\nimport { attachAuthBridge, type AuthBridgeHandle, AUTH_BRIDGE_OBSERVED_ATTRS } from \"../shared/auth-bridge\";\n\nconst SOCIAL_CSS_ATTRIBUTES = Object.values(SOCIAL_THEMING_PROP_TO_PARAM);\n\nclass LegionSocialElement extends HTMLElement {\n  public iframe: HTMLIFrameElement | null = null;\n  private authBridge: AuthBridgeHandle | null = null;\n\n  constructor() {\n    super();\n    this.attachShadow({ mode: \"open\" });\n  }\n\n  static get observedAttributes(): string[] {\n    return [\n      \"api-url\",\n      \n      \"width\",\n      \"height\",\n      \"theme\",\n      \"layout\",\n      \"rows\",\n      \"cols\",\n      \"community-url\",\n      \"channel\",\n      ...SOCIAL_CSS_ATTRIBUTES,\n    \n      ...AUTH_BRIDGE_OBSERVED_ATTRS,\n    ];\n  }\n\n  connectedCallback(): void {\n    this.authBridge = attachAuthBridge(this, {\n      iframeAccessor: () => this.iframe,\n      baseUrl: this.bridgeBaseUrl,\n    });\n    this.render();\n  }\n\n  disconnectedCallback(): void {\n    this.authBridge?.detach();\n    this.authBridge = null;\n  }\n\n  attributeChangedCallback(\n    _name: string,\n    oldValue: string | null,\n    newValue: string | null\n  ): void {\n    if (oldValue !== newValue) {\n      this.render();\n    }\n  }\n\n  private get apiUrl(): string {\n    return this.getAttribute(\"api-url\") || window.location.origin;\n  }\n\n  private get authToken(): string | null {\n    return this.getAttribute(\"auth-token\");\n  }\n\n  private get widgetWidth(): string {\n    return this.getAttribute(\"width\") || \"600\";\n  }\n\n  private get widgetHeight(): string {\n    return this.getAttribute(\"height\") || \"800\";\n  }\n\n  private get theme(): string {\n    return this.getAttribute(\"theme\") || \"light\";\n  }\n\n  private get layout(): string {\n    return (this.getAttribute(\"layout\") || \"feed\").toLowerCase();\n  }\n\n  private get rows(): number {\n    return parseInt(this.getAttribute(\"rows\") || \"3\", 10);\n  }\n\n  private get cols(): number {\n    return parseInt(this.getAttribute(\"cols\") || \"3\", 10);\n  }\n\n  private get communityUrl(): string {\n    return this.getAttribute(\"community-url\") || \"\";\n  }\n\n  private get channel(): string {\n    return this.getAttribute(\"channel\") || \"\";\n  }\n\n  render(): void {\n    if (!this.shadowRoot) return;\n\n    const iframe = document.createElement(\"iframe\");\n    const url = new URL(\"/widget/social\", this.apiUrl);\n\n    if (this.layout) url.searchParams.set(\"layout\", this.layout);\n    if (this.theme) url.searchParams.set(\"theme\", this.theme);\n\n    if (this.layout === \"grid\") {\n      url.searchParams.set(\"rows\", String(this.rows));\n      url.searchParams.set(\"cols\", String(this.cols));\n      if (this.communityUrl) {\n        url.searchParams.set(\"communityUrl\", this.communityUrl);\n      }\n    } else if (this.layout === \"feed\") {\n      if (this.widgetHeight && this.widgetHeight !== \"800\") {\n        url.searchParams.set(\"height\", this.widgetHeight);\n      }\n    }\n\n    if (this.channel) {\n      url.searchParams.set(\"channel\", this.channel);\n    }\n\n    SOCIAL_CSS_ATTRIBUTES.forEach((attr) => {\n      const val = this.getAttribute(attr);\n      if (val !== null && val !== undefined && String(val).length > 0) {\n        url.searchParams.set(attr, val);\n      }\n    });\n\n    iframe.src = url.toString();\n    iframe.width = this.widgetWidth;\n    iframe.height = this.widgetHeight;\n    iframe.frameBorder = \"0\";\n    iframe.scrolling = \"auto\";\n    iframe.title = \"Social Feed Widget\";\n\n    const requiresAuth = this.layout !== \"grid\";\n\n    iframe.onload = () => {\n      if (requiresAuth && this.authToken && iframe.contentWindow) {\n        iframe.contentWindow.postMessage(\n          { type: \"AUTH_TOKEN\", token: this.authToken },\n          this.apiUrl\n        );\n      }\n      this.dispatchEvent(\n        new CustomEvent(\"load\", {\n          detail: { widget: \"social\", layout: this.layout, theme: this.theme },\n        })\n      );\n    };\n\n    iframe.onerror = () => {\n      if (!this.shadowRoot) return;\n      this.shadowRoot.innerHTML = `<div style=\"padding:32px;text-align:center;color:#856404;background:#fff3cd;border:1px solid #ffeaa7;border-radius:8px;\">Failed to load social widget</div>`;\n    };\n\n    const style = document.createElement(\"style\");\n    style.textContent = `\n      :host {\n        display: block;\n        width: ${this.widgetWidth}px;\n        height: ${this.widgetHeight}px;\n      }\n      iframe {\n        width: 100%;\n        height: 100%;\n        border: none;\n        border-radius: 8px;\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n        background: ${this.theme === \"dark\" ? \"#1a1a1a\" : \"white\"};\n      }\n    `;\n\n    this.shadowRoot.innerHTML = \"\";\n    this.shadowRoot.appendChild(style);\n    this.shadowRoot.appendChild(iframe);\n    this.iframe = iframe;\n  }\n\n  private get bridgeBaseUrl(): string {\n    return this.apiUrl;\n  }\n}\n\nif (\n  typeof customElements !== \"undefined\" &&\n  !customElements.get(\"legion-social\")\n) {\n  customElements.define(\"legion-social\", LegionSocialElement);\n}\n\n// Backward compatibility: support <social-widget> tag\nif (\n  typeof customElements !== \"undefined\" &&\n  !customElements.get(\"social-widget\")\n) {\n  customElements.define(\"social-widget\", LegionSocialElement);\n}\n\nexport { LegionSocialElement };\n\n"]}