{"version":3,"sources":["../src/social/types.ts","../src/social/LegionSocial.tsx"],"names":["LegionSocial"],"mappings":"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","file":"social.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","import React, {\n  useRef,\n  useCallback,\n  useMemo,\n  forwardRef,\n  useImperativeHandle,\n} from \"react\";\nimport {\n  type SocialWidgetProps,\n  type SocialThemingProps,\n  SOCIAL_THEMING_PROP_TO_PARAM,\n} from \"./types\";\n\n/**\n * Ref handle exposed by LegionSocial for imperative control.\n */\nexport interface LegionSocialHandle {\n  /** Reload the widget iframe */\n  refresh: () => void;\n}\n\n/**\n * Build the iframe src URL from widget props.\n */\nexport function buildSocialWidgetUrl(props: SocialWidgetProps): string {\n  const {\n    baseUrl,\n    layout = \"feed\",\n    theme = \"light\",\n    rows = 3,\n    cols = 3,\n    communityUrl,\n    channel,\n    height = \"800\",\n  } = props;\n\n  const url = new URL(\"/widget/social\", baseUrl);\n\n  if (layout) url.searchParams.set(\"layout\", layout);\n  if (theme) url.searchParams.set(\"theme\", theme);\n\n  if (layout === \"grid\") {\n    url.searchParams.set(\"rows\", String(rows));\n    url.searchParams.set(\"cols\", String(cols));\n    if (communityUrl) {\n      url.searchParams.set(\"communityUrl\", communityUrl);\n    }\n  } else if (layout === \"feed\") {\n    // For feed layout, pass height to enable constrained scrolling\n    const rawHeight = String(height).replace(\"px\", \"\");\n    if (rawHeight !== \"800\") {\n      url.searchParams.set(\"height\", rawHeight);\n    }\n  }\n\n  if (channel) {\n    url.searchParams.set(\"channel\", channel);\n  }\n\n  // Append theming params\n  const themingKeys = Object.keys(SOCIAL_THEMING_PROP_TO_PARAM) as Array<\n    keyof SocialThemingProps\n  >;\n  for (const key of themingKeys) {\n    const value = props[key];\n    if (value !== undefined && value !== null && String(value).length > 0) {\n      url.searchParams.set(SOCIAL_THEMING_PROP_TO_PARAM[key], String(value));\n    }\n  }\n\n  return url.toString();\n}\n\n/**\n * LegionSocial – a React component that embeds the Legion Social widget\n * via an iframe.\n *\n * @example\n * ```tsx\n * import { LegionSocial } from '@legionhandtech/lht-react-widgets';\n *\n * function App() {\n *   return (\n *     <LegionSocial\n *       baseUrl=\"https://your-legion-domain.com\"\n *       authToken=\"your-jwt-token\"\n *       layout=\"feed\"\n *       theme=\"light\"\n *     />\n *   );\n * }\n * ```\n */\nexport const LegionSocial = forwardRef<LegionSocialHandle, SocialWidgetProps>(\n  function LegionSocial(props, ref) {\n    const {\n      theme = \"light\",\n      layout = \"feed\",\n      authToken,\n      rows,\n      cols,\n      communityUrl,\n      channel,\n      width = \"600px\",\n      height = \"800px\",\n      className,\n      style,\n      onLoad,\n      onError,\n      baseUrl,\n      ...rest\n    } = props;\n\n    const iframeRef = useRef<HTMLIFrameElement>(null);\n\n    useImperativeHandle(\n      ref,\n      () => ({\n        refresh: () => {\n          const iframe = iframeRef.current;\n          if (iframe?.contentWindow) {\n            iframe.contentWindow.location.reload();\n          }\n        },\n      }),\n      []\n    );\n\n    const src = useMemo(\n      () => buildSocialWidgetUrl(props),\n      [\n        baseUrl,\n        layout,\n        theme,\n        rows,\n        cols,\n        communityUrl,\n        channel,\n        height,\n        ...Object.keys(SOCIAL_THEMING_PROP_TO_PARAM).map(\n          (k) => rest[k as keyof typeof rest]\n        ),\n      ]\n    );\n\n    const handleLoad = useCallback(() => {\n      // Auth only for non-grid layouts\n      if (layout !== \"grid\" && authToken && iframeRef.current?.contentWindow) {\n        iframeRef.current.contentWindow.postMessage(\n          { type: \"AUTH_TOKEN\", token: authToken },\n          baseUrl\n        );\n      }\n      onLoad?.({ widget: \"social\", layout, theme });\n    }, [authToken, baseUrl, layout, theme, onLoad]);\n\n    const handleError = useCallback(() => {\n      onError?.(\"Failed to load social widget\");\n    }, [onError]);\n\n    const containerStyle: React.CSSProperties = {\n      display: \"block\",\n      width,\n      height,\n      ...style,\n    };\n\n    const iframeStyle: React.CSSProperties = {\n      border: \"none\",\n      borderRadius: \"8px\",\n      boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n      width: \"100%\",\n      height: \"100%\",\n    };\n\n    return (\n      <div className={className} style={containerStyle}>\n        <iframe\n          ref={iframeRef}\n          src={src}\n          title=\"Social Feed Widget\"\n          width=\"100%\"\n          height=\"100%\"\n          loading=\"lazy\"\n          style={iframeStyle}\n          onLoad={handleLoad}\n          onError={handleError}\n        />\n      </div>\n    );\n  }\n);\n\n"]}