{"version":3,"sources":["../src/community-sidebar/types.ts","../src/community-sidebar/LegionCommunitySidebar.tsx"],"names":["LegionCommunitySidebar"],"mappings":"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","file":"community-sidebar.mjs","sourcesContent":["/**\n * Theming props for the Community Sidebar Widget.\n * These map to CSS custom properties used internally.\n */\nexport interface CommunitySidebarThemingProps {\n  /** Primary color */\n  sidebarPrimaryColor?: string;\n  /** Container background color */\n  sidebarBackgroundColor?: string;\n  /** Primary text color */\n  sidebarTextColor?: string;\n  /** Secondary text color */\n  sidebarSecondaryTextColor?: string;\n  /** Border color */\n  sidebarBorderColor?: string;\n  /** Card background */\n  sidebarCardBg?: string;\n  /** Card border radius */\n  sidebarCardRadius?: string;\n  /** Card box shadow */\n  sidebarCardShadow?: string;\n  /** Link color */\n  sidebarLinkColor?: string;\n  /** Link hover color */\n  sidebarLinkHoverColor?: string;\n  /** Icon color */\n  sidebarIconColor?: string;\n  /** Section border radius */\n  sidebarSectionRadius?: string;\n  /** Section background */\n  sidebarSectionBg?: string;\n  /** Font family */\n  sidebarFontFamily?: string;\n  /** Title font size */\n  sidebarTitleSize?: string;\n  /** Title font weight */\n  sidebarTitleWeight?: string;\n  /** Link font size */\n  sidebarLinkSize?: string;\n  /** Container padding */\n  sidebarPadding?: string;\n  /** Gap between elements */\n  sidebarGap?: string;\n  /** Transition duration */\n  sidebarTransitionDuration?: string;\n}\n\n/**\n * Core configuration props for the Community Sidebar Widget.\n */\nexport interface CommunitySidebarWidgetProps\n  extends CommunitySidebarThemingProps {\n  /** Base URL of the Legion application (required) */\n  baseUrl: string;\n  /** Sidebar title. Default: \"Getting Started\" */\n  title?: string;\n  /** Show community guidelines link. Default: true */\n  showGuidelines?: boolean;\n  /** Show FAQs link. Default: true */\n  showFaqs?: boolean;\n  /** Show tutorials link. Default: true */\n  showTutorials?: boolean;\n  /** Show search links section. Default: true */\n  showSearchLinks?: boolean;\n  /** Community URL prefix. Default: \"/community\" */\n  communityUrl?: string;\n  /** Guidelines page URL. Default: \"/guidelines\" */\n  guidelinesUrl?: string;\n  /** FAQs page URL. Default: \"/faqs\" */\n  faqsUrl?: string;\n  /** Theme preset. Default: \"light\" */\n  theme?: \"light\" | \"dark\";\n  /** Widget height CSS value. Default: \"auto\" */\n  height?: string;\n  /** Widget width CSS value. Default: \"100%\" */\n  width?: 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; 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 kebab-case query params.\n */\nexport const SIDEBAR_THEMING_PROP_TO_PARAM: Record<\n  keyof CommunitySidebarThemingProps,\n  string\n> = {\n  sidebarPrimaryColor: \"sidebar-primary-color\",\n  sidebarBackgroundColor: \"sidebar-background-color\",\n  sidebarTextColor: \"sidebar-text-color\",\n  sidebarSecondaryTextColor: \"sidebar-secondary-text-color\",\n  sidebarBorderColor: \"sidebar-border-color\",\n  sidebarCardBg: \"sidebar-card-bg\",\n  sidebarCardRadius: \"sidebar-card-radius\",\n  sidebarCardShadow: \"sidebar-card-shadow\",\n  sidebarLinkColor: \"sidebar-link-color\",\n  sidebarLinkHoverColor: \"sidebar-link-hover-color\",\n  sidebarIconColor: \"sidebar-icon-color\",\n  sidebarSectionRadius: \"sidebar-section-radius\",\n  sidebarSectionBg: \"sidebar-section-bg\",\n  sidebarFontFamily: \"sidebar-font-family\",\n  sidebarTitleSize: \"sidebar-title-size\",\n  sidebarTitleWeight: \"sidebar-title-weight\",\n  sidebarLinkSize: \"sidebar-link-size\",\n  sidebarPadding: \"sidebar-padding\",\n  sidebarGap: \"sidebar-gap\",\n  sidebarTransitionDuration: \"sidebar-transition-duration\",\n};\n\n","import {\n  useRef,\n  useCallback,\n  useMemo,\n  forwardRef,\n  useImperativeHandle,\n} from \"react\";\nimport {\n  type CommunitySidebarWidgetProps,\n  type CommunitySidebarThemingProps,\n  SIDEBAR_THEMING_PROP_TO_PARAM,\n} from \"./types\";\n\n/**\n * Ref handle exposed by LegionCommunitySidebar for imperative control.\n */\nexport interface LegionCommunitySidebarHandle {\n  /** Reload the widget iframe */\n  refresh: () => void;\n}\n\n/**\n * Build the iframe src URL from widget props.\n */\nexport function buildCommunitySidebarWidgetUrl(\n  props: CommunitySidebarWidgetProps\n): string {\n  const {\n    baseUrl,\n    title = \"Getting Started\",\n    showGuidelines = true,\n    showFaqs = true,\n    showTutorials = true,\n    showSearchLinks = true,\n    communityUrl = \"/community\",\n    guidelinesUrl = \"/guidelines\",\n    faqsUrl = \"/faqs\",\n    theme = \"light\",\n  } = props;\n\n  const url = new URL(\"/widget/community-sidebar\", baseUrl);\n  url.searchParams.set(\"title\", title);\n  url.searchParams.set(\"showGuidelines\", String(showGuidelines));\n  url.searchParams.set(\"showFaqs\", String(showFaqs));\n  url.searchParams.set(\"showTutorials\", String(showTutorials));\n  url.searchParams.set(\"showSearchLinks\", String(showSearchLinks));\n  url.searchParams.set(\"communityUrl\", communityUrl);\n  url.searchParams.set(\"guidelinesUrl\", guidelinesUrl);\n  url.searchParams.set(\"faqsUrl\", faqsUrl);\n  url.searchParams.set(\"theme\", theme);\n\n  // Append theming params\n  const themingKeys = Object.keys(SIDEBAR_THEMING_PROP_TO_PARAM) as Array<\n    keyof CommunitySidebarThemingProps\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(SIDEBAR_THEMING_PROP_TO_PARAM[key], String(value));\n    }\n  }\n\n  return url.toString();\n}\n\n/**\n * LegionCommunitySidebar – a React component that embeds the Legion\n * Community Sidebar widget via an iframe.\n */\nexport const LegionCommunitySidebar = forwardRef<\n  LegionCommunitySidebarHandle,\n  CommunitySidebarWidgetProps\n>(function LegionCommunitySidebar(props, ref) {\n  const {\n    title = \"Getting Started\",\n    showGuidelines,\n    showFaqs,\n    showTutorials,\n    showSearchLinks,\n    communityUrl,\n    guidelinesUrl,\n    faqsUrl,\n    theme = \"light\",\n    height = \"auto\",\n    width = \"100%\",\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    () => buildCommunitySidebarWidgetUrl(props),\n    [\n      baseUrl, title, showGuidelines, showFaqs, showTutorials, showSearchLinks,\n      communityUrl, guidelinesUrl, faqsUrl, theme,\n      ...Object.keys(SIDEBAR_THEMING_PROP_TO_PARAM).map(\n        (k) => rest[k as keyof typeof rest]\n      ),\n    ]\n  );\n\n  const handleLoad = useCallback(() => {\n    onLoad?.({ widget: \"community-sidebar\", theme });\n  }, [theme, onLoad]);\n\n  const handleError = useCallback(() => {\n    onError?.(\"Failed to load community sidebar widget\");\n  }, [onError]);\n\n  const resolvedHeight = height === \"auto\" ? \"400px\" : height;\n\n  return (\n    <div\n      className={className}\n      style={{ width, height: resolvedHeight, ...style }}\n      data-testid=\"legion-community-sidebar\"\n    >\n      <iframe\n        ref={iframeRef}\n        src={src}\n        title=\"Community Sidebar Widget\"\n        width=\"100%\"\n        height=\"100%\"\n        frameBorder=\"0\"\n        scrolling=\"no\"\n        loading=\"lazy\"\n        onLoad={handleLoad}\n        onError={handleError}\n        style={{ border: \"none\" }}\n      />\n    </div>\n  );\n});\n\n"]}