{"version":3,"file":"index.mjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../node_modules/classnames/index.js","../src/hooks/useAdMeshTracker.ts","../src/components/AdMeshLinkTracker.tsx","../src/components/AdMeshProductCard.tsx","../src/components/AdMeshCompareTable.tsx","../src/components/AdMeshBadge.tsx","../src/hooks/useAdMeshStyles.ts","../src/components/AdMeshLayout.tsx","../src/components/AdMeshInlineRecommendation.tsx","../src/components/AdMeshConversationSummary.tsx","../src/components/AdMeshCitationReference.tsx","../src/components/AdMeshCitationUnit.tsx","../src/components/AdMeshConversationalUnit.tsx","../src/components/AdMeshSidebarHeader.tsx","../src/components/AdMeshSidebarContent.tsx","../src/components/AdMeshSidebar.tsx","../src/components/AdMeshChatMessage.tsx","../src/components/AdMeshChatInput.tsx","../src/components/AdMeshChatInterface.tsx","../src/components/AdMeshFloatingChat.tsx","../src/components/AdMeshAutoRecommendationWidget.tsx","../src/index.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function getComponentNameFromType(type) {\n      if (null == type) return null;\n      if (\"function\" === typeof type)\n        return type.$$typeof === REACT_CLIENT_REFERENCE\n          ? null\n          : type.displayName || type.name || null;\n      if (\"string\" === typeof type) return type;\n      switch (type) {\n        case REACT_FRAGMENT_TYPE:\n          return \"Fragment\";\n        case REACT_PROFILER_TYPE:\n          return \"Profiler\";\n        case REACT_STRICT_MODE_TYPE:\n          return \"StrictMode\";\n        case REACT_SUSPENSE_TYPE:\n          return \"Suspense\";\n        case REACT_SUSPENSE_LIST_TYPE:\n          return \"SuspenseList\";\n        case REACT_ACTIVITY_TYPE:\n          return \"Activity\";\n      }\n      if (\"object\" === typeof type)\n        switch (\n          (\"number\" === typeof type.tag &&\n            console.error(\n              \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n            ),\n          type.$$typeof)\n        ) {\n          case REACT_PORTAL_TYPE:\n            return \"Portal\";\n          case REACT_CONTEXT_TYPE:\n            return (type.displayName || \"Context\") + \".Provider\";\n          case REACT_CONSUMER_TYPE:\n            return (type._context.displayName || \"Context\") + \".Consumer\";\n          case REACT_FORWARD_REF_TYPE:\n            var innerType = type.render;\n            type = type.displayName;\n            type ||\n              ((type = innerType.displayName || innerType.name || \"\"),\n              (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n            return type;\n          case REACT_MEMO_TYPE:\n            return (\n              (innerType = type.displayName || null),\n              null !== innerType\n                ? innerType\n                : getComponentNameFromType(type.type) || \"Memo\"\n            );\n          case REACT_LAZY_TYPE:\n            innerType = type._payload;\n            type = type._init;\n            try {\n              return getComponentNameFromType(type(innerType));\n            } catch (x) {}\n        }\n      return null;\n    }\n    function testStringCoercion(value) {\n      return \"\" + value;\n    }\n    function checkKeyStringCoercion(value) {\n      try {\n        testStringCoercion(value);\n        var JSCompiler_inline_result = !1;\n      } catch (e) {\n        JSCompiler_inline_result = !0;\n      }\n      if (JSCompiler_inline_result) {\n        JSCompiler_inline_result = console;\n        var JSCompiler_temp_const = JSCompiler_inline_result.error;\n        var JSCompiler_inline_result$jscomp$0 =\n          (\"function\" === typeof Symbol &&\n            Symbol.toStringTag &&\n            value[Symbol.toStringTag]) ||\n          value.constructor.name ||\n          \"Object\";\n        JSCompiler_temp_const.call(\n          JSCompiler_inline_result,\n          \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n          JSCompiler_inline_result$jscomp$0\n        );\n        return testStringCoercion(value);\n      }\n    }\n    function getTaskName(type) {\n      if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n      if (\n        \"object\" === typeof type &&\n        null !== type &&\n        type.$$typeof === REACT_LAZY_TYPE\n      )\n        return \"<...>\";\n      try {\n        var name = getComponentNameFromType(type);\n        return name ? \"<\" + name + \">\" : \"<...>\";\n      } catch (x) {\n        return \"<...>\";\n      }\n    }\n    function getOwner() {\n      var dispatcher = ReactSharedInternals.A;\n      return null === dispatcher ? null : dispatcher.getOwner();\n    }\n    function UnknownOwner() {\n      return Error(\"react-stack-top-frame\");\n    }\n    function hasValidKey(config) {\n      if (hasOwnProperty.call(config, \"key\")) {\n        var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n        if (getter && getter.isReactWarning) return !1;\n      }\n      return void 0 !== config.key;\n    }\n    function defineKeyPropWarningGetter(props, displayName) {\n      function warnAboutAccessingKey() {\n        specialPropKeyWarningShown ||\n          ((specialPropKeyWarningShown = !0),\n          console.error(\n            \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n            displayName\n          ));\n      }\n      warnAboutAccessingKey.isReactWarning = !0;\n      Object.defineProperty(props, \"key\", {\n        get: warnAboutAccessingKey,\n        configurable: !0\n      });\n    }\n    function elementRefGetterWithDeprecationWarning() {\n      var componentName = getComponentNameFromType(this.type);\n      didWarnAboutElementRef[componentName] ||\n        ((didWarnAboutElementRef[componentName] = !0),\n        console.error(\n          \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n        ));\n      componentName = this.props.ref;\n      return void 0 !== componentName ? componentName : null;\n    }\n    function ReactElement(\n      type,\n      key,\n      self,\n      source,\n      owner,\n      props,\n      debugStack,\n      debugTask\n    ) {\n      self = props.ref;\n      type = {\n        $$typeof: REACT_ELEMENT_TYPE,\n        type: type,\n        key: key,\n        props: props,\n        _owner: owner\n      };\n      null !== (void 0 !== self ? self : null)\n        ? Object.defineProperty(type, \"ref\", {\n            enumerable: !1,\n            get: elementRefGetterWithDeprecationWarning\n          })\n        : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n      type._store = {};\n      Object.defineProperty(type._store, \"validated\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: 0\n      });\n      Object.defineProperty(type, \"_debugInfo\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: null\n      });\n      Object.defineProperty(type, \"_debugStack\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugStack\n      });\n      Object.defineProperty(type, \"_debugTask\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugTask\n      });\n      Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n      return type;\n    }\n    function jsxDEVImpl(\n      type,\n      config,\n      maybeKey,\n      isStaticChildren,\n      source,\n      self,\n      debugStack,\n      debugTask\n    ) {\n      var children = config.children;\n      if (void 0 !== children)\n        if (isStaticChildren)\n          if (isArrayImpl(children)) {\n            for (\n              isStaticChildren = 0;\n              isStaticChildren < children.length;\n              isStaticChildren++\n            )\n              validateChildKeys(children[isStaticChildren]);\n            Object.freeze && Object.freeze(children);\n          } else\n            console.error(\n              \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n            );\n        else validateChildKeys(children);\n      if (hasOwnProperty.call(config, \"key\")) {\n        children = getComponentNameFromType(type);\n        var keys = Object.keys(config).filter(function (k) {\n          return \"key\" !== k;\n        });\n        isStaticChildren =\n          0 < keys.length\n            ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n            : \"{key: someKey}\";\n        didWarnAboutKeySpread[children + isStaticChildren] ||\n          ((keys =\n            0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n          console.error(\n            'A props object containing a \"key\" prop is being spread into JSX:\\n  let props = %s;\\n  <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n  let props = %s;\\n  <%s key={someKey} {...props} />',\n            isStaticChildren,\n            children,\n            keys,\n            children\n          ),\n          (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n      }\n      children = null;\n      void 0 !== maybeKey &&\n        (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n      hasValidKey(config) &&\n        (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n      if (\"key\" in config) {\n        maybeKey = {};\n        for (var propName in config)\n          \"key\" !== propName && (maybeKey[propName] = config[propName]);\n      } else maybeKey = config;\n      children &&\n        defineKeyPropWarningGetter(\n          maybeKey,\n          \"function\" === typeof type\n            ? type.displayName || type.name || \"Unknown\"\n            : type\n        );\n      return ReactElement(\n        type,\n        children,\n        self,\n        source,\n        getOwner(),\n        maybeKey,\n        debugStack,\n        debugTask\n      );\n    }\n    function validateChildKeys(node) {\n      \"object\" === typeof node &&\n        null !== node &&\n        node.$$typeof === REACT_ELEMENT_TYPE &&\n        node._store &&\n        (node._store.validated = 1);\n    }\n    var React = require(\"react\"),\n      REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n    Symbol.for(\"react.provider\");\n    var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n      ReactSharedInternals =\n        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n      hasOwnProperty = Object.prototype.hasOwnProperty,\n      isArrayImpl = Array.isArray,\n      createTask = console.createTask\n        ? console.createTask\n        : function () {\n            return null;\n          };\n    React = {\n      \"react-stack-bottom-frame\": function (callStackForError) {\n        return callStackForError();\n      }\n    };\n    var specialPropKeyWarningShown;\n    var didWarnAboutElementRef = {};\n    var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n      React,\n      UnknownOwner\n    )();\n    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n    var didWarnAboutKeySpread = {};\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.jsx = function (type, config, maybeKey, source, self) {\n      var trackActualOwner =\n        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n      return jsxDEVImpl(\n        type,\n        config,\n        maybeKey,\n        !1,\n        source,\n        self,\n        trackActualOwner\n          ? Error(\"react-stack-top-frame\")\n          : unknownOwnerDebugStack,\n        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n      );\n    };\n    exports.jsxs = function (type, config, maybeKey, source, self) {\n      var trackActualOwner =\n        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n      return jsxDEVImpl(\n        type,\n        config,\n        maybeKey,\n        !0,\n        source,\n        self,\n        trackActualOwner\n          ? Error(\"react-stack-top-frame\")\n          : unknownOwnerDebugStack,\n        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n      );\n    };\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { useState, useCallback, useMemo } from 'react';\nimport type { TrackingData, UseAdMeshTrackerReturn } from '../types/index';\n\n// Default tracking endpoint - can be overridden via config\nconst DEFAULT_TRACKING_URL = 'https://api.useadmesh.com/track';\n\ninterface TrackingConfig {\n  apiBaseUrl?: string;\n  enabled?: boolean;\n  debug?: boolean;\n  retryAttempts?: number;\n  retryDelay?: number;\n}\n\n// Global config that can be set by the consuming application\nlet globalConfig: TrackingConfig = {\n  apiBaseUrl: DEFAULT_TRACKING_URL,\n  enabled: true,\n  debug: false,\n  retryAttempts: 3,\n  retryDelay: 1000\n};\n\nexport const setAdMeshTrackerConfig = (config: Partial<TrackingConfig>) => {\n  globalConfig = { ...globalConfig, ...config };\n};\n\nexport const useAdMeshTracker = (config?: Partial<TrackingConfig>): UseAdMeshTrackerReturn => {\n  const [isTracking, setIsTracking] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n\n  const mergedConfig = useMemo(() => ({ ...globalConfig, ...config }), [config]);\n\n  const log = useCallback((message: string, data?: unknown) => {\n    if (mergedConfig.debug) {\n      console.log(`[AdMesh Tracker] ${message}`, data);\n    }\n  }, [mergedConfig.debug]);\n\n  const sendTrackingEvent = useCallback(async (\n    eventType: 'click' | 'view' | 'conversion',\n    data: TrackingData\n  ): Promise<void> => {\n    if (!mergedConfig.enabled) {\n      log('Tracking disabled, skipping event', { eventType, data });\n      return;\n    }\n\n    if (!data.adId || !data.admeshLink) {\n      const errorMsg = 'Missing required tracking data: adId and admeshLink are required';\n      log(errorMsg, data);\n      setError(errorMsg);\n      return;\n    }\n\n    setIsTracking(true);\n    setError(null);\n\n    const payload = {\n      event_type: eventType,\n      ad_id: data.adId,\n      admesh_link: data.admeshLink,\n      product_id: data.productId,\n      user_id: data.userId,\n      session_id: data.sessionId,\n      revenue: data.revenue,\n      conversion_type: data.conversionType,\n      metadata: data.metadata,\n      timestamp: new Date().toISOString(),\n      user_agent: navigator.userAgent,\n      referrer: document.referrer,\n      page_url: window.location.href\n    };\n\n    log(`Sending ${eventType} event`, payload);\n\n    let lastError: Error | null = null;\n    \n    for (let attempt = 1; attempt <= (mergedConfig.retryAttempts || 3); attempt++) {\n      try {\n        const response = await fetch(`${mergedConfig.apiBaseUrl}/events`, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n          },\n          body: JSON.stringify(payload),\n        });\n\n        if (!response.ok) {\n          throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n        }\n\n        const result = await response.json();\n        log(`${eventType} event tracked successfully`, result);\n        setIsTracking(false);\n        return;\n\n      } catch (err) {\n        lastError = err as Error;\n        log(`Attempt ${attempt} failed for ${eventType} event`, err);\n        \n        if (attempt < (mergedConfig.retryAttempts || 3)) {\n          await new Promise(resolve => \n            setTimeout(resolve, (mergedConfig.retryDelay || 1000) * attempt)\n          );\n        }\n      }\n    }\n\n    // All attempts failed\n    const errorMsg = `Failed to track ${eventType} event after ${mergedConfig.retryAttempts} attempts: ${lastError?.message}`;\n    log(errorMsg, lastError);\n    setError(errorMsg);\n    setIsTracking(false);\n  }, [mergedConfig, log]);\n\n  const trackClick = useCallback(async (data: TrackingData): Promise<void> => {\n    return sendTrackingEvent('click', data);\n  }, [sendTrackingEvent]);\n\n  const trackView = useCallback(async (data: TrackingData): Promise<void> => {\n    return sendTrackingEvent('view', data);\n  }, [sendTrackingEvent]);\n\n  const trackConversion = useCallback(async (data: TrackingData): Promise<void> => {\n    if (!data.revenue && !data.conversionType) {\n      log('Warning: Conversion tracking without revenue or conversion type', data);\n    }\n    return sendTrackingEvent('conversion', data);\n  }, [sendTrackingEvent, log]);\n\n  return {\n    trackClick,\n    trackView,\n    trackConversion,\n    isTracking,\n    error\n  };\n};\n\n// Utility function to build admesh_link with tracking parameters\nexport const buildAdMeshLink = (\n  baseLink: string, \n  adId: string, \n  additionalParams?: Record<string, string>\n): string => {\n  try {\n    const url = new URL(baseLink);\n    url.searchParams.set('ad_id', adId);\n    url.searchParams.set('utm_source', 'admesh');\n    url.searchParams.set('utm_medium', 'recommendation');\n    \n    if (additionalParams) {\n      Object.entries(additionalParams).forEach(([key, value]) => {\n        url.searchParams.set(key, value);\n      });\n    }\n    \n    return url.toString();\n  } catch (err) {\n    console.warn('[AdMesh] Invalid URL provided to buildAdMeshLink:', baseLink, err);\n    return baseLink;\n  }\n};\n\n// Helper function to extract tracking data from recommendation\nexport const extractTrackingData = (\n  recommendation: { ad_id: string; admesh_link: string; product_id: string },\n  additionalData?: Partial<TrackingData>\n): TrackingData => {\n  return {\n    adId: recommendation.ad_id,\n    admeshLink: recommendation.admesh_link,\n    productId: recommendation.product_id,\n    ...additionalData\n  };\n};\n","import React, { useCallback, useEffect, useRef } from 'react';\nimport type { AdMeshLinkTrackerProps } from '../types/index';\nimport { useAdMeshTracker } from '../hooks/useAdMeshTracker';\n\nexport const AdMeshLinkTracker: React.FC<AdMeshLinkTrackerProps> = ({\n  adId,\n  admeshLink,\n  productId,\n  children,\n  onClick,\n  trackingData,\n  className\n}) => {\n  const { trackClick, trackView } = useAdMeshTracker();\n  const elementRef = useRef<HTMLDivElement>(null);\n  const hasTrackedView = useRef(false);\n\n  // Track view when component becomes visible\n  useEffect(() => {\n    if (!elementRef.current || hasTrackedView.current) return;\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting && !hasTrackedView.current) {\n            hasTrackedView.current = true;\n            trackView({\n              adId,\n              admeshLink,\n              productId,\n              ...trackingData\n            }).catch(console.error);\n          }\n        });\n      },\n      {\n        threshold: 0.5, // Track when 50% of the element is visible\n        rootMargin: '0px'\n      }\n    );\n\n    observer.observe(elementRef.current);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [adId, admeshLink, productId, trackingData, trackView]);\n\n  const handleClick = useCallback(async (event: React.MouseEvent) => {\n    // Track the click\n    try {\n      await trackClick({\n        adId,\n        admeshLink,\n        productId,\n        ...trackingData\n      });\n    } catch (error) {\n      console.error('Failed to track click:', error);\n    }\n\n    // Call custom onClick handler if provided\n    if (onClick) {\n      onClick();\n    }\n\n    // If the children contain a link, let the browser handle navigation\n    // Otherwise, navigate programmatically\n    const target = event.target as HTMLElement;\n    const link = target.closest('a');\n    \n    if (!link) {\n      // No link found, navigate programmatically\n      window.open(admeshLink, '_blank', 'noopener,noreferrer');\n    }\n    // If there's a link, let the browser handle it naturally\n  }, [adId, admeshLink, productId, trackingData, trackClick, onClick]);\n\n  return (\n    <div\n      ref={elementRef}\n      className={className}\n      onClick={handleClick}\n      style={{ cursor: 'pointer' }}\n    >\n      {children}\n    </div>\n  );\n};\n\nAdMeshLinkTracker.displayName = 'AdMeshLinkTracker';\n","import React, { useMemo } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshProductCardProps, BadgeType } from '../types/index';\nimport { AdMeshLinkTracker } from './AdMeshLinkTracker';\n\nexport const AdMeshProductCard: React.FC<AdMeshProductCardProps> = ({\n  recommendation,\n  theme,\n  showMatchScore = true,\n  showBadges = true,\n  onClick,\n  className\n}) => {\n  // Generate badges based on recommendation data\n  const badges = useMemo((): BadgeType[] => {\n    const generatedBadges: BadgeType[] = [];\n    \n    // Add Top Match badge for high match scores\n    if (recommendation.intent_match_score >= 0.8) {\n      generatedBadges.push('Top Match');\n    }\n    \n    // Add Free Tier badge\n    if (recommendation.has_free_tier) {\n      generatedBadges.push('Free Tier');\n    }\n    \n    // Add Trial Available badge\n    if (recommendation.trial_days && recommendation.trial_days > 0) {\n      generatedBadges.push('Trial Available');\n    }\n    \n    // Add AI Powered badge (check if AI-related keywords exist)\n    const aiKeywords = ['ai', 'artificial intelligence', 'machine learning', 'ml', 'automation'];\n    const hasAIKeywords = recommendation.keywords?.some(keyword => \n      aiKeywords.some(ai => keyword.toLowerCase().includes(ai))\n    ) || recommendation.title.toLowerCase().includes('ai');\n    \n    if (hasAIKeywords) {\n      generatedBadges.push('AI Powered');\n    }\n    \n    return generatedBadges;\n  }, [recommendation]);\n\n  // Format match score as percentage\n  const matchScorePercentage = Math.round(recommendation.intent_match_score * 100);\n\n  const cardClasses = classNames(\n    'admesh-component',\n    'admesh-card',\n    'relative p-3 rounded-lg bg-white dark:bg-slate-800 border border-gray-200 dark:border-slate-700 shadow-sm hover:shadow transition-shadow cursor-pointer',\n    className\n  );\n\n  const cardStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n    '--admesh-primary-hover': theme.accentColor + 'dd', // Add some transparency for hover\n  } as React.CSSProperties : undefined;\n\n  return (\n    <AdMeshLinkTracker\n      adId={recommendation.ad_id}\n      admeshLink={recommendation.admesh_link}\n      productId={recommendation.product_id}\n      onClick={() => onClick?.(recommendation.ad_id, recommendation.admesh_link)}\n      trackingData={{\n        title: recommendation.title,\n        matchScore: recommendation.intent_match_score\n      }}\n      className={cardClasses}\n    >\n      <div\n        className=\"h-full flex flex-col\"\n        style={cardStyle}\n        data-admesh-theme={theme?.mode}\n      >\n        {/* Header with badges and title */}\n        <div className=\"flex justify-between items-start mb-2\">\n          <div className=\"flex items-center gap-2\">\n            {showBadges && badges.includes('Top Match') && (\n              <span className=\"text-xs font-semibold text-white bg-black px-2 py-0.5 rounded-full\">\n                Top Match\n              </span>\n            )}\n            <h4 className=\"font-semibold text-gray-800 dark:text-gray-200\">\n              {recommendation.title}\n            </h4>\n\n            <div className=\"flex gap-2\">\n              <button className=\"text-xs px-2 py-1 rounded-full bg-black text-white hover:bg-gray-800 flex items-center\">\n                Visit\n                <svg className=\"ml-1 h-3 w-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\" />\n                </svg>\n              </button>\n            </div>\n          </div>\n        </div>\n\n        <p className=\"text-sm text-gray-700 dark:text-gray-300 mb-3\">\n          {recommendation.reason}\n        </p>\n\n        {/* Confidence Score */}\n        {showMatchScore && typeof recommendation.intent_match_score === \"number\" && (\n          <div className=\"mb-3\">\n            <div className=\"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400 mb-1\">\n              <span>Confidence</span>\n              <span>{matchScorePercentage}%</span>\n            </div>\n            <div className=\"w-full bg-gray-200 dark:bg-slate-600 rounded h-1.5 overflow-hidden\">\n              <div\n                className=\"bg-black h-1.5\"\n                style={{ width: `${matchScorePercentage}%` }}\n              />\n            </div>\n          </div>\n        )}\n\n        <div className=\"flex flex-wrap gap-2 text-xs mb-2\">\n          {recommendation.pricing && (\n            <span className=\"flex items-center text-gray-600 dark:text-gray-400\">\n              <svg className=\"h-3 w-3 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1\" />\n              </svg>\n              {recommendation.pricing}\n            </span>\n          )}\n\n          {recommendation.has_free_tier && (\n            <span className=\"flex items-center px-1.5 py-0.5 bg-gray-100 dark:bg-gray-900/30 text-gray-700 dark:text-gray-400 rounded-full\">\n              <svg className=\"h-3 w-3 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v13m0-13V6a2 2 0 112 2h-2zm0 0V5.5A2.5 2.5 0 109.5 8H12zm-7 4h14M5 12a2 2 0 110-4h14a2 2 0 110 4M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7\" />\n              </svg>\n              Free Tier\n            </span>\n          )}\n\n          {recommendation.trial_days && recommendation.trial_days > 0 && (\n            <span className=\"flex items-center text-gray-600 dark:text-gray-400\">\n              <svg className=\"h-3 w-3 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3a2 2 0 012-2h4a2 2 0 012 2v4m-6 4v10m6-10v10m-6 0h6\" />\n              </svg>\n              {recommendation.trial_days}-day trial\n            </span>\n          )}\n        </div>\n\n        {/* Features */}\n        {recommendation.features && recommendation.features.length > 0 && (\n          <div className=\"mb-2\">\n            <div className=\"text-xs text-gray-500 dark:text-gray-400 mb-1\">\n              Features:\n            </div>\n            <div className=\"flex flex-wrap gap-1.5\">\n              {recommendation.features.map((feature, j) => (\n                <span\n                  key={j}\n                  className=\"text-xs px-2 py-0.5 rounded-full bg-gray-100 dark:bg-slate-700 text-gray-700 dark:text-gray-300\"\n                >\n                  <svg className=\"h-3 w-3 mr-0.5 inline text-gray-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n                  </svg>\n                  {feature}\n                </span>\n              ))}\n            </div>\n          </div>\n        )}\n\n        {/* Integrations */}\n        {recommendation.integrations && recommendation.integrations.length > 0 && (\n          <div className=\"mb-2\">\n            <div className=\"text-xs text-gray-500 dark:text-gray-400 mb-1\">\n              Integrates with:\n            </div>\n            <div className=\"flex flex-wrap gap-1.5\">\n              {recommendation.integrations.map((integration, j) => (\n                <span\n                  key={j}\n                  className=\"text-xs px-2 py-0.5 rounded-full bg-gray-100 dark:bg-gray-900/30 text-gray-700 dark:text-gray-300\"\n                >\n                  <svg className=\"h-3 w-3 mr-0.5 inline\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\" />\n                  </svg>\n                  {integration}\n                </span>\n              ))}\n            </div>\n          </div>\n        )}\n\n        {/* Reviews summary */}\n        {recommendation.reviews_summary && (\n          <div className=\"text-xs text-gray-600 dark:text-gray-400 mt-2\">\n            {recommendation.reviews_summary}\n          </div>\n        )}\n\n        {/* Powered by AdMesh branding */}\n        <div className=\"flex justify-end mt-auto pt-2\">\n          <span className=\"text-xs text-gray-400 dark:text-gray-500\">\n            Powered by AdMesh\n          </span>\n        </div>\n      </div>\n    </AdMeshLinkTracker>\n  );\n};\n\nAdMeshProductCard.displayName = 'AdMeshProductCard';\n","import React, { useMemo } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshCompareTableProps } from '../types/index';\nimport { AdMeshLinkTracker } from './AdMeshLinkTracker';\n\nexport const AdMeshCompareTable: React.FC<AdMeshCompareTableProps> = ({\n  recommendations,\n  theme,\n  maxProducts = 3,\n  showMatchScores = true,\n  showFeatures = true,\n  onProductClick,\n  className\n}) => {\n  // Limit the number of products to compare\n  const productsToCompare = useMemo(() => {\n    return recommendations.slice(0, maxProducts);\n  }, [recommendations, maxProducts]);\n\n\n\n  const containerClasses = classNames(\n    'admesh-component',\n    'admesh-compare-layout',\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  if (productsToCompare.length === 0) {\n    return (\n      <div className={containerClasses}>\n        <div className=\"p-8 text-center text-gray-500 dark:text-gray-400\">\n          <p>No products to compare</p>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      <div className=\"space-y-6\">\n        {/* Header */}\n        <div className=\"text-center\">\n          <div className=\"flex items-center justify-center gap-2 mb-2\">\n            <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n            </svg>\n            <h3 className=\"text-lg font-semibold text-gray-800 dark:text-gray-200\">\n              Smart Comparison\n            </h3>\n          </div>\n          <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n            {productsToCompare.length} intelligent matches found\n          </p>\n        </div>\n\n        {/* Product Cards Grid */}\n        <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n          {productsToCompare.map((product, index) => (\n            <AdMeshLinkTracker\n              key={product.product_id || index}\n              adId={product.ad_id}\n              admeshLink={product.admesh_link}\n              productId={product.product_id}\n              onClick={() => onProductClick?.(product.ad_id, product.admesh_link)}\n              className=\"relative p-4 rounded-lg bg-white dark:bg-slate-800 border border-gray-200 dark:border-slate-700 shadow-sm hover:shadow transition-shadow\"\n            >\n              {/* Product Header */}\n              <div className=\"flex justify-between items-start mb-3\">\n                <div className=\"flex items-center gap-2\">\n                  {index === 0 && (\n                    <span className=\"text-xs font-semibold text-white bg-black px-2 py-0.5 rounded-full\">\n                      Top Match\n                    </span>\n                  )}\n                  <span className=\"text-xs text-gray-400 dark:text-gray-500\">\n                    #{index + 1}\n                  </span>\n                </div>\n                {showMatchScores && (\n                  <div className=\"text-xs text-gray-500 dark:text-gray-400\">\n                    {Math.round(product.intent_match_score * 100)}% match\n                  </div>\n                )}\n              </div>\n\n              {/* Product Title */}\n              <h4 className=\"font-semibold text-gray-800 dark:text-gray-200 mb-2\">\n                {product.title}\n              </h4>\n\n              {/* Confidence Score */}\n              {showMatchScores && (\n                <div className=\"mb-3\">\n                  <div className=\"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400 mb-1\">\n                    <span>Confidence</span>\n                    <span>{Math.round(product.intent_match_score * 100)}%</span>\n                  </div>\n                  <div className=\"w-full bg-gray-200 dark:bg-slate-600 rounded h-1.5 overflow-hidden\">\n                    <div\n                      className=\"bg-black h-1.5\"\n                      style={{ width: `${Math.round(product.intent_match_score * 100)}%` }}\n                    />\n                  </div>\n                </div>\n              )}\n\n              {/* Pricing and Trial Info */}\n              <div className=\"flex flex-wrap gap-2 text-xs mb-3\">\n                {product.pricing && (\n                  <span className=\"flex items-center text-gray-600 dark:text-gray-400\">\n                    <svg className=\"h-3 w-3 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                      <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1\" />\n                    </svg>\n                    {product.pricing}\n                  </span>\n                )}\n\n                {product.has_free_tier && (\n                  <span className=\"flex items-center px-1.5 py-0.5 bg-gray-100 dark:bg-gray-900/30 text-gray-700 dark:text-gray-400 rounded-full\">\n                    <svg className=\"h-3 w-3 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                      <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v13m0-13V6a2 2 0 112 2h-2zm0 0V5.5A2.5 2.5 0 109.5 8H12zm-7 4h14M5 12a2 2 0 110-4h14a2 2 0 110 4M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7\" />\n                    </svg>\n                    Free Tier\n                  </span>\n                )}\n\n                {product.trial_days && product.trial_days > 0 && (\n                  <span className=\"flex items-center text-gray-600 dark:text-gray-400\">\n                    <svg className=\"h-3 w-3 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                      <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3a2 2 0 012-2h4a2 2 0 012 2v4m-6 4v10m6-10v10m-6 0h6\" />\n                    </svg>\n                    {product.trial_days}-day trial\n                  </span>\n                )}\n              </div>\n\n              {/* Features */}\n              {showFeatures && product.features && product.features.length > 0 && (\n                <div className=\"mb-3\">\n                  <div className=\"text-xs text-gray-500 dark:text-gray-400 mb-1\">\n                    Key Features:\n                  </div>\n                  <div className=\"flex flex-wrap gap-1.5\">\n                    {product.features.slice(0, 4).map((feature, j) => (\n                      <span\n                        key={j}\n                        className=\"text-xs px-2 py-0.5 rounded-full bg-gray-100 dark:bg-slate-700 text-gray-700 dark:text-gray-300\"\n                      >\n                        <svg className=\"h-3 w-3 mr-0.5 inline text-gray-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                          <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n                        </svg>\n                        {feature}\n                      </span>\n                    ))}\n                    {(product.features.length || 0) > 4 && (\n                      <span className=\"text-xs text-gray-500 dark:text-gray-400 italic\">\n                        +{product.features.length - 4} more\n                      </span>\n                    )}\n                  </div>\n                </div>\n              )}\n\n              {/* Visit Button */}\n              <button className=\"w-full text-xs px-3 py-2 rounded-lg bg-black text-white hover:bg-gray-800 flex items-center justify-center gap-1 mt-auto\">\n                Visit Offer\n                <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\" />\n                </svg>\n              </button>\n            </AdMeshLinkTracker>\n          ))}\n        </div>\n\n        {/* Powered by AdMesh branding */}\n        <div className=\"flex items-center justify-center mt-6 pt-4 border-t border-gray-200/50 dark:border-gray-700/50\">\n          <span className=\"flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500\">\n            <svg className=\"w-3 h-3 text-indigo-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n              <path fillRule=\"evenodd\" d=\"M11.3 1.046A1 1 0 0112 2v5h4a1 1 0 01.82 1.573l-7 10A1 1 0 018 18v-5H4a1 1 0 01-.82-1.573l7-10a1 1 0 011.12-.38z\" clipRule=\"evenodd\" />\n            </svg>\n            <span className=\"font-medium\">Powered by</span>\n            <span className=\"font-semibold text-indigo-600 dark:text-indigo-400\">AdMesh</span>\n          </span>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nAdMeshCompareTable.displayName = 'AdMeshCompareTable';\n","import React from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshBadgeProps, BadgeType } from '../types/index';\n\n// Badge type to variant mapping\nconst badgeTypeVariants: Record<BadgeType, string> = {\n  'Top Match': 'primary',\n  'Free Tier': 'success',\n  'AI Powered': 'secondary',\n  'Popular': 'warning',\n  'New': 'primary',\n  'Trial Available': 'success'\n};\n\n// Badge type to icon mapping (using modern Unicode icons)\nconst badgeTypeIcons: Partial<Record<BadgeType, string>> = {\n  'Top Match': '★',\n  'Free Tier': '◆',\n  'AI Powered': '◉',\n  'Popular': '▲',\n  'New': '●',\n  'Trial Available': '◈'\n};\n\nexport const AdMeshBadge: React.FC<AdMeshBadgeProps> = ({\n  type,\n  variant,\n  size = 'md',\n  className\n}) => {\n  const effectiveVariant = variant || badgeTypeVariants[type] || 'secondary';\n  const icon = badgeTypeIcons[type];\n\n  const badgeClasses = classNames(\n    'admesh-component',\n    'admesh-badge',\n    `admesh-badge--${effectiveVariant}`,\n    `admesh-badge--${size}`,\n    className\n  );\n\n  return (\n    <span className={badgeClasses}>\n      {icon && <span className=\"admesh-badge__icon\">{icon}</span>}\n      <span className=\"admesh-badge__text\">{type}</span>\n    </span>\n  );\n};\n\nAdMeshBadge.displayName = 'AdMeshBadge';\n","import { useEffect } from 'react';\n\n// CSS content as a string - this will be injected automatically\nconst ADMESH_STYLES = `\n/* AdMesh UI SDK Scoped Styles - Smart Recommendations Design */\n.admesh-component {\n  --admesh-primary: #6366f1;\n  --admesh-primary-hover: #4f46e5;\n  --admesh-secondary: #8b5cf6;\n  --admesh-accent: #06b6d4;\n  --admesh-background: #ffffff;\n  --admesh-surface: #ffffff;\n  --admesh-border: #e2e8f0;\n  --admesh-text: #0f172a;\n  --admesh-text-muted: #64748b;\n  --admesh-text-light: #94a3b8;\n  --admesh-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --admesh-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n  --admesh-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --admesh-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --admesh-radius: 0.75rem;\n  --admesh-radius-sm: 0.375rem;\n  --admesh-radius-lg: 1rem;\n  --admesh-radius-xl: 1.5rem;\n}\n\n.admesh-component[data-admesh-theme=\"dark\"] {\n  --admesh-background: #111827;\n  --admesh-surface: #1f2937;\n  --admesh-border: #374151;\n  --admesh-text: #f9fafb;\n  --admesh-text-muted: #9ca3af;\n}\n\n/* Layout Styles */\n.admesh-layout {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  color: var(--admesh-text);\n  background-color: var(--admesh-background);\n  border-radius: var(--admesh-radius);\n  padding: 1.5rem;\n  box-shadow: var(--admesh-shadow);\n  border: 1px solid var(--admesh-border);\n}\n\n.admesh-layout__header {\n  margin-bottom: 1.5rem;\n  text-align: center;\n}\n\n.admesh-layout__title {\n  font-size: 1.25rem;\n  font-weight: 600;\n  color: var(--admesh-text);\n  margin-bottom: 0.5rem;\n}\n\n.admesh-layout__subtitle {\n  font-size: 0.875rem;\n  color: var(--admesh-text-muted);\n}\n\n.admesh-layout__cards-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n  gap: 1rem;\n  margin-bottom: 1.5rem;\n}\n\n.admesh-layout__more-indicator {\n  text-align: center;\n  padding: 1rem;\n  color: var(--admesh-text-muted);\n  font-size: 0.875rem;\n}\n\n.admesh-layout__empty {\n  text-align: center;\n  padding: 3rem 1rem;\n}\n\n.admesh-layout__empty-content h3 {\n  font-size: 1.125rem;\n  font-weight: 600;\n  color: var(--admesh-text-muted);\n  margin-bottom: 0.5rem;\n}\n\n.admesh-layout__empty-content p {\n  font-size: 0.875rem;\n  color: var(--admesh-text-muted);\n}\n\n/* Product Card Styles */\n.admesh-product-card {\n  background-color: var(--admesh-surface);\n  border: 1px solid var(--admesh-border);\n  border-radius: var(--admesh-radius);\n  padding: 1.5rem;\n  transition: all 0.2s ease-in-out;\n  position: relative;\n  overflow: hidden;\n}\n\n.admesh-product-card:hover {\n  box-shadow: var(--admesh-shadow-lg);\n  transform: translateY(-2px);\n  border-color: var(--admesh-primary);\n}\n\n.admesh-product-card__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  margin-bottom: 1rem;\n}\n\n.admesh-product-card__title {\n  font-size: 1.125rem;\n  font-weight: 600;\n  color: var(--admesh-text);\n  margin-bottom: 0.5rem;\n  line-height: 1.4;\n}\n\n.admesh-product-card__reason {\n  font-size: 0.875rem;\n  color: var(--admesh-text-muted);\n  line-height: 1.5;\n  margin-bottom: 1rem;\n}\n\n.admesh-product-card__match-score {\n  margin-bottom: 1rem;\n}\n\n.admesh-product-card__match-score-label {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-size: 0.75rem;\n  color: var(--admesh-text-muted);\n  margin-bottom: 0.25rem;\n}\n\n.admesh-product-card__match-score-bar {\n  width: 100%;\n  height: 0.375rem;\n  background-color: var(--admesh-border);\n  border-radius: var(--admesh-radius-sm);\n  overflow: hidden;\n}\n\n.admesh-product-card__match-score-fill {\n  height: 100%;\n  background: linear-gradient(90deg, var(--admesh-primary), #8b5cf6);\n  border-radius: var(--admesh-radius-sm);\n  transition: width 0.3s ease-in-out;\n}\n\n.admesh-product-card__badges {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n}\n\n.admesh-product-card__badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.25rem;\n  padding: 0.25rem 0.5rem;\n  background-color: var(--admesh-primary);\n  color: white;\n  font-size: 0.75rem;\n  font-weight: 500;\n  border-radius: var(--admesh-radius-sm);\n}\n\n.admesh-product-card__badge--secondary {\n  background-color: var(--admesh-secondary);\n}\n\n.admesh-product-card__keywords {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.25rem;\n  margin-bottom: 1rem;\n}\n\n.admesh-product-card__keyword {\n  padding: 0.125rem 0.375rem;\n  background-color: var(--admesh-border);\n  color: var(--admesh-text-muted);\n  font-size: 0.75rem;\n  border-radius: var(--admesh-radius-sm);\n}\n\n.admesh-product-card__footer {\n  display: flex;\n  justify-content: flex-end;\n  margin-top: 1.5rem;\n}\n\n.admesh-product-card__button {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.5rem;\n  padding: 0.75rem 1.5rem;\n  background: linear-gradient(90deg, var(--admesh-primary), var(--admesh-primary-hover));\n  color: white;\n  font-size: 0.875rem;\n  font-weight: 500;\n  border: none;\n  border-radius: var(--admesh-radius);\n  cursor: pointer;\n  transition: all 0.2s ease-in-out;\n  text-decoration: none;\n}\n\n.admesh-product-card__button:hover {\n  transform: translateY(-1px);\n  box-shadow: var(--admesh-shadow-lg);\n}\n\n/* Utility Classes */\n.admesh-text-xs { font-size: 0.75rem; }\n.admesh-text-sm { font-size: 0.875rem; }\n.admesh-text-base { font-size: 1rem; }\n.admesh-text-lg { font-size: 1.125rem; }\n.admesh-text-xl { font-size: 1.25rem; }\n\n.admesh-font-medium { font-weight: 500; }\n.admesh-font-semibold { font-weight: 600; }\n.admesh-font-bold { font-weight: 700; }\n\n.admesh-text-muted { color: var(--admesh-text-muted); }\n\n/* Responsive Design */\n@media (max-width: 768px) {\n  .admesh-layout {\n    padding: 1rem;\n  }\n  \n  .admesh-layout__cards-grid {\n    grid-template-columns: 1fr;\n    gap: 0.75rem;\n  }\n  \n  .admesh-product-card {\n    padding: 1rem;\n  }\n}\n`;\n\nlet stylesInjected = false;\n\nexport const useAdMeshStyles = () => {\n  useEffect(() => {\n    if (stylesInjected) return;\n\n    // Create and inject styles\n    const styleElement = document.createElement('style');\n    styleElement.id = 'admesh-ui-sdk-styles';\n    styleElement.textContent = ADMESH_STYLES;\n    \n    // Check if styles are already injected\n    if (!document.getElementById('admesh-ui-sdk-styles')) {\n      document.head.appendChild(styleElement);\n      stylesInjected = true;\n    }\n\n    // Cleanup function\n    return () => {\n      const existingStyle = document.getElementById('admesh-ui-sdk-styles');\n      if (existingStyle && document.head.contains(existingStyle)) {\n        document.head.removeChild(existingStyle);\n        stylesInjected = false;\n      }\n    };\n  }, []);\n};\n","import React, { useMemo } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshLayoutProps, IntentType, AdMeshRecommendation } from '../types/index';\nimport { AdMeshProductCard } from './AdMeshProductCard';\nimport { AdMeshCompareTable } from './AdMeshCompareTable';\nimport { useAdMeshStyles } from '../hooks/useAdMeshStyles';\n\n// Layout selection logic based on intent type and data characteristics\nconst selectOptimalLayout = (\n  recommendations: AdMeshRecommendation[],\n  intentType?: IntentType,\n  autoLayout?: boolean\n): 'cards' | 'compare' | 'list' => {\n  if (!autoLayout && intentType) {\n    // Use explicit intent type mapping\n    switch (intentType) {\n      case 'compare_products':\n        return 'compare';\n      case 'best_for_use_case':\n      case 'trial_demo':\n      case 'budget_conscious':\n        return 'cards';\n      default:\n        return 'cards';\n    }\n  }\n\n  // Auto-layout logic based on data characteristics\n  const productCount = recommendations.length;\n  \n  // If we have 2-4 products with features, use comparison table\n  if (productCount >= 2 && productCount <= 4) {\n    const hasFeatures = recommendations.some(rec => rec.features && rec.features.length > 0);\n    const hasPricing = recommendations.some(rec => rec.pricing);\n    \n    if (hasFeatures || hasPricing) {\n      return 'compare';\n    }\n  }\n  \n  // Default to cards layout\n  return 'cards';\n};\n\nexport const AdMeshLayout: React.FC<AdMeshLayoutProps> = ({\n  recommendations,\n  intentType,\n  theme,\n  maxDisplayed = 6,\n  showMatchScores = true,\n  showFeatures = true,\n  autoLayout = true,\n  onProductClick,\n  onTrackView,\n  className\n}) => {\n  // Auto-inject styles\n  useAdMeshStyles();\n\n  // Limit recommendations to display\n  const displayRecommendations = useMemo(() => {\n    return recommendations.slice(0, maxDisplayed);\n  }, [recommendations, maxDisplayed]);\n\n  // Determine the optimal layout\n  const layout = useMemo(() => {\n    return selectOptimalLayout(displayRecommendations, intentType, autoLayout);\n  }, [displayRecommendations, intentType, autoLayout]);\n\n  const containerClasses = classNames(\n    'admesh-component',\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  if (displayRecommendations.length === 0) {\n    return (\n      <div className={containerClasses}>\n        <div className=\"admesh-layout__empty\">\n          <div className=\"admesh-layout__empty-content\">\n            <div className=\"flex items-center justify-center mb-3\">\n              <svg className=\"w-8 h-8 text-indigo-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n                <path fillRule=\"evenodd\" d=\"M11.3 1.046A1 1 0 0112 2v5h4a1 1 0 01.82 1.573l-7 10A1 1 0 018 18v-5H4a1 1 0 01-.82-1.573l7-10a1 1 0 011.12-.38z\" clipRule=\"evenodd\" />\n              </svg>\n            </div>\n            <h3 className=\"admesh-text-lg admesh-font-semibold admesh-text-muted\">\n              No smart recommendations found\n            </h3>\n            <p className=\"admesh-text-sm admesh-text-muted\">\n              Try refining your search or check back later for new matches.\n            </p>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div \n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {layout === 'compare' ? (\n        <AdMeshCompareTable\n          recommendations={displayRecommendations}\n          theme={theme}\n          maxProducts={Math.min(displayRecommendations.length, 4)}\n          showMatchScores={showMatchScores}\n          showFeatures={showFeatures}\n          onProductClick={onProductClick}\n        />\n      ) : (\n        <div className=\"space-y-4\">\n          {displayRecommendations.map((recommendation, index) => (\n            <AdMeshProductCard\n              key={recommendation.product_id || recommendation.ad_id || index}\n              recommendation={recommendation}\n              theme={theme}\n              showMatchScore={showMatchScores}\n              showBadges={true}\n              maxKeywords={3}\n              onClick={onProductClick}\n              onTrackView={onTrackView}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nAdMeshLayout.displayName = 'AdMeshLayout';\n","import React from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshInlineRecommendationProps } from '../types/index';\nimport { AdMeshLinkTracker } from './AdMeshLinkTracker';\n\nexport const AdMeshInlineRecommendation: React.FC<AdMeshInlineRecommendationProps> = ({\n  recommendation,\n  theme,\n  compact = false,\n  showReason = true,\n  onClick,\n  className\n}) => {\n  const matchScorePercentage = Math.round(recommendation.intent_match_score * 100);\n\n  const containerClasses = classNames(\n    'admesh-inline-recommendation',\n    'group cursor-pointer transition-all duration-200',\n    {\n      'p-2 rounded-md bg-gray-50 dark:bg-slate-800/50 hover:bg-gray-100 dark:hover:bg-slate-800 border border-gray-200 dark:border-slate-700': !compact,\n      'p-1.5 rounded hover:bg-gray-50 dark:hover:bg-slate-800/30': compact,\n    },\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <AdMeshLinkTracker\n      adId={recommendation.ad_id}\n      admeshLink={recommendation.admesh_link}\n      productId={recommendation.product_id}\n      onClick={() => onClick?.(recommendation.ad_id, recommendation.admesh_link)}\n      trackingData={{\n        title: recommendation.title,\n        matchScore: recommendation.intent_match_score\n      }}\n      className={containerClasses}\n    >\n      <div\n        className=\"flex items-start gap-3\"\n        style={containerStyle}\n        data-admesh-theme={theme?.mode}\n      >\n        {/* Icon/Badge */}\n        <div className=\"flex-shrink-0 mt-0.5\">\n          {recommendation.intent_match_score >= 0.8 ? (\n            <div className=\"w-2 h-2 bg-green-500 rounded-full\"></div>\n          ) : (\n            <div className=\"w-2 h-2 bg-blue-500 rounded-full\"></div>\n          )}\n        </div>\n\n        {/* Content */}\n        <div className=\"flex-1 min-w-0\">\n          <div className=\"flex items-center gap-2 mb-1\">\n            <h4 className={classNames(\n              'font-medium truncate transition-colors duration-200',\n              'text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300',\n              'cursor-pointer hover:underline',\n              compact ? 'text-sm' : 'text-base'\n            )}>\n              {recommendation.title}\n            </h4>\n            \n            {/* Match score badge */}\n            {recommendation.intent_match_score >= 0.7 && (\n              <span className={classNames(\n                'inline-flex items-center px-1.5 py-0.5 rounded-full text-xs font-medium',\n                recommendation.intent_match_score >= 0.8 \n                  ? 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400'\n                  : 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400'\n              )}>\n                {matchScorePercentage}% match\n              </span>\n            )}\n          </div>\n\n          {/* Reason/Description */}\n          {showReason && recommendation.reason && (\n            <p className={classNames(\n              'text-gray-600 dark:text-gray-400 line-clamp-2',\n              compact ? 'text-xs' : 'text-sm'\n            )}>\n              {recommendation.reason}\n            </p>\n          )}\n\n          {/* Features/Keywords */}\n          {!compact && recommendation.keywords && recommendation.keywords.length > 0 && (\n            <div className=\"flex flex-wrap gap-1 mt-2\">\n              {recommendation.keywords.slice(0, 3).map((keyword, index) => (\n                <span\n                  key={index}\n                  className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-gray-100 text-gray-800 dark:bg-slate-700 dark:text-gray-300\"\n                >\n                  {keyword}\n                </span>\n              ))}\n              {recommendation.keywords.length > 3 && (\n                <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n                  +{recommendation.keywords.length - 3} more\n                </span>\n              )}\n            </div>\n          )}\n\n          {/* Pricing/Trial info */}\n          {!compact && (recommendation.has_free_tier || recommendation.trial_days) && (\n            <div className=\"flex items-center gap-2 mt-2\">\n              {recommendation.has_free_tier && (\n                <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\">\n                  Free tier\n                </span>\n              )}\n              {recommendation.trial_days && recommendation.trial_days > 0 && (\n                <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\">\n                  {recommendation.trial_days}-day trial\n                </span>\n              )}\n            </div>\n          )}\n        </div>\n\n        {/* Arrow indicator */}\n        <div className=\"flex-shrink-0 opacity-0 group-hover:opacity-100 transition-opacity\">\n          <svg \n            className=\"w-4 h-4 text-gray-400 dark:text-gray-500\" \n            fill=\"none\" \n            stroke=\"currentColor\" \n            viewBox=\"0 0 24 24\"\n          >\n            <path \n              strokeLinecap=\"round\" \n              strokeLinejoin=\"round\" \n              strokeWidth={2} \n              d=\"M9 5l7 7-7 7\" \n            />\n          </svg>\n        </div>\n      </div>\n    </AdMeshLinkTracker>\n  );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshConversationSummaryProps } from '../types/index';\nimport { AdMeshInlineRecommendation } from './AdMeshInlineRecommendation';\n\nexport const AdMeshConversationSummary: React.FC<AdMeshConversationSummaryProps> = ({\n  recommendations,\n  conversationSummary,\n  theme,\n  showTopRecommendations = 3,\n  onRecommendationClick,\n  onStartNewConversation,\n  className\n}) => {\n  const topRecommendations = recommendations\n    .sort((a, b) => b.intent_match_score - a.intent_match_score)\n    .slice(0, showTopRecommendations);\n\n  const containerClasses = classNames(\n    'admesh-conversation-summary',\n    'bg-gradient-to-br from-slate-50 to-blue-50 dark:from-slate-900 dark:to-slate-800',\n    'rounded-lg border border-gray-200 dark:border-slate-700 p-6',\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Header */}\n      <div className=\"flex items-center gap-3 mb-4\">\n        <div className=\"flex-shrink-0\">\n          <div className=\"w-10 h-10 bg-gradient-to-br from-blue-500 to-indigo-600 rounded-full flex items-center justify-center\">\n            <svg className=\"w-5 h-5 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n            </svg>\n          </div>\n        </div>\n        <div>\n          <h3 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100\">\n            Conversation Summary\n          </h3>\n          <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n            Here's what we discussed and found for you\n          </p>\n        </div>\n      </div>\n\n      {/* Summary Text */}\n      <div className=\"mb-6\">\n        <div className=\"bg-white dark:bg-slate-800 rounded-lg p-4 border border-gray-100 dark:border-slate-700\">\n          <p className=\"text-gray-700 dark:text-gray-300 leading-relaxed\">\n            {conversationSummary}\n          </p>\n        </div>\n      </div>\n\n      {/* Top Recommendations */}\n      {topRecommendations.length > 0 && (\n        <div className=\"mb-6\">\n          <div className=\"flex items-center gap-2 mb-3\">\n            <svg className=\"w-5 h-5 text-blue-600 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n            </svg>\n            <h4 className=\"font-medium text-gray-900 dark:text-gray-100\">\n              Top Recommendations\n            </h4>\n          </div>\n          \n          <div className=\"space-y-2\">\n            {topRecommendations.map((recommendation, index) => (\n              <div key={recommendation.ad_id || index} className=\"relative\">\n                {/* Ranking badge */}\n                <div className=\"absolute -left-2 top-2 z-10\">\n                  <div className={classNames(\n                    'w-6 h-6 rounded-full flex items-center justify-center text-xs font-bold text-white',\n                    index === 0 ? 'bg-yellow-500' : index === 1 ? 'bg-gray-400' : 'bg-orange-400'\n                  )}>\n                    {index + 1}\n                  </div>\n                </div>\n                \n                <div className=\"ml-4\">\n                  <AdMeshInlineRecommendation\n                    recommendation={recommendation}\n                    theme={theme}\n                    compact={false}\n                    showReason={true}\n                    onClick={onRecommendationClick}\n                  />\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n      )}\n\n      {/* Additional Insights */}\n      {recommendations.length > showTopRecommendations && (\n        <div className=\"mb-6\">\n          <div className=\"bg-blue-50 dark:bg-blue-900/20 rounded-lg p-3 border border-blue-200 dark:border-blue-800\">\n            <div className=\"flex items-center gap-2\">\n              <svg className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n              </svg>\n              <span className=\"text-sm font-medium text-blue-800 dark:text-blue-300\">\n                {recommendations.length - showTopRecommendations} additional recommendation{recommendations.length - showTopRecommendations > 1 ? 's' : ''} available\n              </span>\n            </div>\n          </div>\n        </div>\n      )}\n\n      {/* Action Buttons */}\n      <div className=\"flex flex-col sm:flex-row gap-3\">\n        {onStartNewConversation && (\n          <button\n            onClick={onStartNewConversation}\n            className=\"flex-1 bg-gradient-to-r from-blue-600 to-indigo-600 hover:from-blue-700 hover:to-indigo-700 text-white font-medium py-2.5 px-4 rounded-lg transition-all duration-200 flex items-center justify-center gap-2\"\n          >\n            <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\n            </svg>\n            Start New Conversation\n          </button>\n        )}\n        \n        <button\n          onClick={() => {\n            if (topRecommendations.length > 0) {\n              onRecommendationClick?.(topRecommendations[0].ad_id, topRecommendations[0].admesh_link);\n            }\n          }}\n          className=\"flex-1 bg-white dark:bg-slate-800 hover:bg-gray-50 dark:hover:bg-slate-700 text-gray-700 dark:text-gray-300 font-medium py-2.5 px-4 rounded-lg border border-gray-300 dark:border-slate-600 transition-all duration-200 flex items-center justify-center gap-2\"\n        >\n          <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\" />\n          </svg>\n          View Top Pick\n        </button>\n      </div>\n\n      {/* Powered by AdMesh */}\n      <div className=\"flex justify-center mt-4 pt-4 border-t border-gray-200 dark:border-slate-700\">\n        <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n          Powered by AdMesh\n        </span>\n      </div>\n    </div>\n  );\n};\n","import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshCitationReferenceProps } from '../types/index';\nimport { AdMeshLinkTracker } from './AdMeshLinkTracker';\n\nexport const AdMeshCitationReference: React.FC<AdMeshCitationReferenceProps> = ({\n  recommendation,\n  citationNumber,\n  citationStyle = 'numbered',\n  theme,\n  showTooltip = true,\n  onClick,\n  onHover,\n  className\n}) => {\n  const [isHovered, setIsHovered] = useState(false);\n\n  const handleMouseEnter = () => {\n    setIsHovered(true);\n    onHover?.(recommendation);\n  };\n\n  const handleMouseLeave = () => {\n    setIsHovered(false);\n  };\n\n  const handleClick = () => {\n    onClick?.(recommendation.ad_id, recommendation.admesh_link);\n  };\n\n  // Generate citation display based on style\n  const getCitationDisplay = () => {\n    switch (citationStyle) {\n      case 'bracketed':\n        return `[${citationNumber}]`;\n      case 'superscript':\n        return citationNumber.toString();\n      case 'numbered':\n      default:\n        return citationNumber.toString();\n    }\n  };\n\n  const citationClasses = classNames(\n    'admesh-citation-reference',\n    'inline-flex items-center justify-center',\n    'cursor-pointer transition-all duration-200',\n    'text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300',\n    'font-medium',\n    {\n      // Numbered style (default)\n      'w-5 h-5 bg-blue-100 dark:bg-blue-900/30 rounded-full text-xs border border-blue-300 dark:border-blue-700 hover:bg-blue-200 dark:hover:bg-blue-900/50': citationStyle === 'numbered',\n      \n      // Bracketed style\n      'px-1 text-sm hover:underline': citationStyle === 'bracketed',\n      \n      // Superscript style\n      'text-xs align-super hover:underline': citationStyle === 'superscript',\n    },\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <span className=\"relative inline-block\">\n      <AdMeshLinkTracker\n        adId={recommendation.ad_id}\n        admeshLink={recommendation.admesh_link}\n        productId={recommendation.product_id}\n        onClick={handleClick}\n        trackingData={{\n          title: recommendation.title,\n          matchScore: recommendation.intent_match_score,\n          citationNumber,\n          citationStyle\n        }}\n        className={citationClasses}\n      >\n        <span\n          style={containerStyle}\n          data-admesh-theme={theme?.mode}\n          onMouseEnter={handleMouseEnter}\n          onMouseLeave={handleMouseLeave}\n        >\n          {getCitationDisplay()}\n        </span>\n      </AdMeshLinkTracker>\n\n      {/* Tooltip */}\n      {showTooltip && isHovered && (\n        <div className=\"absolute bottom-full left-1/2 transform -translate-x-1/2 mb-2 z-50\">\n          <div className=\"bg-gray-900 dark:bg-gray-100 text-white dark:text-gray-900 text-xs rounded-lg px-3 py-2 shadow-lg max-w-xs\">\n            <div className=\"font-semibold mb-1\">{recommendation.title}</div>\n            {recommendation.reason && (\n              <div className=\"text-gray-300 dark:text-gray-600 text-xs\">\n                {recommendation.reason.length > 100 \n                  ? `${recommendation.reason.substring(0, 100)}...` \n                  : recommendation.reason\n                }\n              </div>\n            )}\n            {recommendation.intent_match_score >= 0.7 && (\n              <div className=\"text-green-400 dark:text-green-600 text-xs mt-1\">\n                {Math.round(recommendation.intent_match_score * 100)}% match\n              </div>\n            )}\n            <div className=\"text-gray-400 dark:text-gray-500 text-xs mt-1 italic\">\n              Click to visit product page\n            </div>\n            {/* Tooltip arrow */}\n            <div className=\"absolute top-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-gray-900 dark:border-t-gray-100\"></div>\n          </div>\n        </div>\n      )}\n    </span>\n  );\n};\n","import React, { useState, useMemo } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshCitationUnitProps, AdMeshRecommendation } from '../types/index';\nimport { AdMeshCitationReference } from './AdMeshCitationReference';\nimport { AdMeshInlineRecommendation } from './AdMeshInlineRecommendation';\n\nexport const AdMeshCitationUnit: React.FC<AdMeshCitationUnitProps> = ({\n  recommendations,\n  conversationText,\n  theme,\n  showCitationList = true,\n  citationStyle = 'numbered',\n  onRecommendationClick,\n  onCitationHover,\n  className\n}) => {\n  const [hoveredRecommendation, setHoveredRecommendation] = useState<AdMeshRecommendation | null>(null);\n\n  // Process conversation text to insert citations\n  const processedContent = useMemo(() => {\n    if (!conversationText || recommendations.length === 0) {\n      return { text: conversationText, citationMap: new Map() };\n    }\n\n    let processedText = conversationText;\n    const citationMap = new Map();\n    \n    // Sort recommendations by intent match score (highest first)\n    const sortedRecommendations = [...recommendations]\n      .sort((a, b) => b.intent_match_score - a.intent_match_score);\n\n    // Find mentions of product titles in the text and replace with citations\n    sortedRecommendations.forEach((recommendation, index) => {\n      const citationNumber = index + 1;\n      const title = recommendation.title;\n      \n      // Create citation reference\n      citationMap.set(citationNumber, recommendation);\n      \n      // Look for exact title matches (case insensitive)\n      const titleRegex = new RegExp(`\\\\b${title.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`, 'gi');\n      \n      // Replace first occurrence with citation\n      if (titleRegex.test(processedText)) {\n        processedText = processedText.replace(titleRegex, (match) => {\n          return `${match}{{CITATION_${citationNumber}}}`;\n        });\n      } else {\n        // If no exact match, try to find a good insertion point\n        // Look for related keywords or add at the end of relevant sentences\n        const keywords = recommendation.keywords || [];\n        let inserted = false;\n        \n        for (const keyword of keywords) {\n          const keywordRegex = new RegExp(`\\\\b${keyword.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`, 'gi');\n          if (keywordRegex.test(processedText) && !inserted) {\n            processedText = processedText.replace(keywordRegex, (match) => {\n              inserted = true;\n              return `${match}{{CITATION_${citationNumber}}}`;\n            });\n            break;\n          }\n        }\n        \n        // If still no insertion point found, add citation at the end\n        if (!inserted) {\n          processedText += `{{CITATION_${citationNumber}}}`;\n        }\n      }\n    });\n\n    return { text: processedText, citationMap };\n  }, [conversationText, recommendations]);\n\n  // Render text with embedded citations\n  const renderTextWithCitations = () => {\n    const { text, citationMap } = processedContent;\n    const parts = text.split(/(\\{\\{CITATION_\\d+\\}\\})/);\n\n    return parts.map((part, index) => {\n      const citationMatch = part.match(/\\{\\{CITATION_(\\d+)\\}\\}/);\n\n      if (citationMatch) {\n        const citationNumber = parseInt(citationMatch[1]);\n        const recommendation = citationMap.get(citationNumber);\n\n        if (recommendation) {\n          return (\n            <AdMeshCitationReference\n              key={`citation-${citationNumber}`}\n              recommendation={recommendation}\n              citationNumber={citationNumber}\n              citationStyle={citationStyle}\n              theme={theme}\n              showTooltip={true}\n              onClick={onRecommendationClick}\n              onHover={(rec) => {\n                setHoveredRecommendation(rec);\n                onCitationHover?.(rec);\n              }}\n            />\n          );\n        }\n      }\n\n      return <span key={index}>{part}</span>;\n    });\n  };\n\n  const containerClasses = classNames(\n    'admesh-citation-unit',\n    'space-y-4',\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Main conversation text with embedded citations */}\n      <div className=\"admesh-citation-text text-gray-800 dark:text-gray-200 leading-relaxed\">\n        {renderTextWithCitations()}\n      </div>\n\n      {/* Citation list/references */}\n      {showCitationList && recommendations.length > 0 && (\n        <div className=\"admesh-citation-list\">\n          <div className=\"border-t border-gray-200 dark:border-slate-700 pt-4\">\n            <h4 className=\"text-sm font-semibold text-gray-700 dark:text-gray-300 mb-3 flex items-center gap-2\">\n              <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1\" />\n              </svg>\n              References\n            </h4>\n            \n            <div className=\"space-y-2\">\n              {recommendations\n                .sort((a, b) => b.intent_match_score - a.intent_match_score)\n                .map((recommendation, index) => (\n                  <div \n                    key={recommendation.ad_id || index}\n                    className={classNames(\n                      'flex items-start gap-3 p-2 rounded-lg transition-colors duration-200',\n                      {\n                        'bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800': \n                          hoveredRecommendation?.ad_id === recommendation.ad_id,\n                        'hover:bg-gray-50 dark:hover:bg-slate-800/50': \n                          hoveredRecommendation?.ad_id !== recommendation.ad_id\n                      }\n                    )}\n                  >\n                    {/* Citation number */}\n                    <div className=\"flex-shrink-0 mt-1\">\n                      <AdMeshCitationReference\n                        recommendation={recommendation}\n                        citationNumber={index + 1}\n                        citationStyle={citationStyle}\n                        theme={theme}\n                        showTooltip={false}\n                        onClick={onRecommendationClick}\n                      />\n                    </div>\n                    \n                    {/* Recommendation details */}\n                    <div className=\"flex-1 min-w-0\">\n                      <AdMeshInlineRecommendation\n                        recommendation={recommendation}\n                        theme={theme}\n                        compact={true}\n                        showReason={false}\n                        onClick={onRecommendationClick}\n                      />\n                    </div>\n                  </div>\n                ))}\n            </div>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n","import React, { useState, useEffect } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshConversationalUnitProps } from '../types/index';\nimport { AdMeshInlineRecommendation } from './AdMeshInlineRecommendation';\nimport { AdMeshConversationSummary } from './AdMeshConversationSummary';\nimport { AdMeshProductCard } from './AdMeshProductCard';\nimport { AdMeshCitationUnit } from './AdMeshCitationUnit';\n\nexport const AdMeshConversationalUnit: React.FC<AdMeshConversationalUnitProps> = ({\n  recommendations,\n  config,\n  theme,\n  conversationSummary,\n  sessionId,\n  onRecommendationClick,\n  onDismiss,\n  className\n}) => {\n  const [isVisible, setIsVisible] = useState(config.autoShow !== false);\n  const [hasAnimated, setHasAnimated] = useState(false);\n\n  useEffect(() => {\n    if (config.delayMs && config.delayMs > 0) {\n      const timer = setTimeout(() => {\n        setIsVisible(true);\n        setHasAnimated(true);\n      }, config.delayMs);\n      return () => clearTimeout(timer);\n    } else {\n      setHasAnimated(true);\n    }\n  }, [config.delayMs]);\n\n  if (!isVisible || recommendations.length === 0) {\n    return null;\n  }\n\n  const maxRecommendations = config.maxRecommendations || 3;\n  const displayRecommendations = recommendations.slice(0, maxRecommendations);\n\n  const handleRecommendationClick = (adId: string, admeshLink: string) => {\n    onRecommendationClick?.(adId, admeshLink);\n  };\n\n  const handleDismiss = () => {\n    setIsVisible(false);\n    onDismiss?.();\n  };\n\n  // Render based on display mode\n  const renderContent = () => {\n    switch (config.displayMode) {\n      case 'summary':\n        return conversationSummary ? (\n          <AdMeshConversationSummary\n            recommendations={displayRecommendations}\n            conversationSummary={conversationSummary}\n            theme={theme}\n            showTopRecommendations={maxRecommendations}\n            onRecommendationClick={handleRecommendationClick}\n            onStartNewConversation={onDismiss}\n          />\n        ) : null;\n\n      case 'inline':\n        return (\n          <div className=\"space-y-2\">\n            {displayRecommendations.map((recommendation, index) => (\n              <AdMeshInlineRecommendation\n                key={recommendation.ad_id || index}\n                recommendation={recommendation}\n                theme={theme}\n                compact={true}\n                showReason={true}\n                onClick={handleRecommendationClick}\n              />\n            ))}\n          </div>\n        );\n\n      case 'minimal':\n        return displayRecommendations.length > 0 ? (\n          <div className=\"admesh-minimal-unit\">\n            <div className=\"flex items-center gap-2 mb-2\">\n              <div className=\"w-2 h-2 bg-blue-500 rounded-full\"></div>\n              <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n                {displayRecommendations.length} intelligent match{displayRecommendations.length > 1 ? 'es' : ''} found\n              </span>\n            </div>\n            <AdMeshInlineRecommendation\n              recommendation={displayRecommendations[0]}\n              theme={theme}\n              compact={true}\n              showReason={false}\n              onClick={handleRecommendationClick}\n            />\n            {displayRecommendations.length > 1 && (\n              <div className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n                +{displayRecommendations.length - 1} more recommendation{displayRecommendations.length > 2 ? 's' : ''}\n              </div>\n            )}\n          </div>\n        ) : null;\n\n      case 'citation':\n        return conversationSummary ? (\n          <AdMeshCitationUnit\n            recommendations={displayRecommendations}\n            conversationText={conversationSummary}\n            theme={theme}\n            showCitationList={true}\n            citationStyle=\"numbered\"\n            onRecommendationClick={handleRecommendationClick}\n          />\n        ) : null;\n\n      case 'floating':\n        return (\n          <div className=\"admesh-floating-unit bg-white dark:bg-slate-800 rounded-lg shadow-lg border border-gray-200 dark:border-slate-700 p-4\">\n            <div className=\"flex justify-between items-start mb-3\">\n              <div className=\"flex items-center gap-2\">\n                <div className=\"w-2 h-2 bg-blue-500 rounded-full\"></div>\n                <span className=\"text-sm font-semibold text-gray-800 dark:text-gray-200\">\n                  Recommended for you\n                </span>\n              </div>\n              {onDismiss && (\n                <button\n                  onClick={handleDismiss}\n                  className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors\"\n                  aria-label=\"Dismiss recommendations\"\n                >\n                  <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n                  </svg>\n                </button>\n              )}\n            </div>\n            <div className=\"space-y-2\">\n              {displayRecommendations.map((recommendation, index) => (\n                <AdMeshInlineRecommendation\n                  key={recommendation.ad_id || index}\n                  recommendation={recommendation}\n                  theme={theme}\n                  compact={true}\n                  showReason={false}\n                  onClick={handleRecommendationClick}\n                />\n              ))}\n            </div>\n          </div>\n        );\n\n      default:\n        return (\n          <div className=\"space-y-3\">\n            {displayRecommendations.map((recommendation, index) => (\n              <AdMeshProductCard\n                key={recommendation.ad_id || index}\n                recommendation={recommendation}\n                theme={theme}\n                showMatchScore={false}\n                showBadges={true}\n                onClick={handleRecommendationClick}\n              />\n            ))}\n          </div>\n        );\n    }\n  };\n\n  const containerClasses = classNames(\n    'admesh-conversational-unit',\n    'transition-all duration-300 ease-in-out',\n    {\n      'opacity-0 translate-y-2': !hasAnimated,\n      'opacity-100 translate-y-0': hasAnimated,\n      'fixed bottom-4 right-4 max-w-sm z-50': config.displayMode === 'floating',\n      'my-3': config.displayMode === 'inline',\n      'mt-4 pt-4 border-t border-gray-200 dark:border-slate-700': config.displayMode === 'summary',\n    },\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n      data-admesh-context={config.context}\n      data-session-id={sessionId}\n    >\n      {renderContent()}\n      \n      {/* Powered by AdMesh branding */}\n      {config.showPoweredBy !== false && (\n        <div className=\"flex justify-end mt-2\">\n          <span className=\"text-xs text-gray-400 dark:text-gray-500\">\n            Powered by AdMesh\n          </span>\n        </div>\n      )}\n    </div>\n  );\n};\n","import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshSidebarHeaderProps } from '../types/index';\n\nexport const AdMeshSidebarHeader: React.FC<AdMeshSidebarHeaderProps> = ({\n  title,\n  theme,\n  collapsible = false,\n  isCollapsed = false,\n  onToggle,\n  onSearch,\n  showSearch = false,\n  className\n}) => {\n  const [searchQuery, setSearchQuery] = useState('');\n  const [isSearchFocused, setIsSearchFocused] = useState(false);\n\n  const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const value = e.target.value;\n    setSearchQuery(value);\n    onSearch?.(value);\n  };\n\n  const handleSearchClear = () => {\n    setSearchQuery('');\n    onSearch?.('');\n  };\n\n  const headerClasses = classNames(\n    'admesh-sidebar-header',\n    'flex flex-col p-4 border-b border-gray-200 dark:border-slate-700 bg-gray-50 dark:bg-slate-800',\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <div\n      className={headerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Title and Toggle */}\n      <div className=\"flex items-center justify-between mb-3\">\n        <h3 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100 truncate\">\n          {title}\n        </h3>\n        \n        {collapsible && (\n          <button\n            onClick={onToggle}\n            className=\"p-1.5 rounded-lg hover:bg-gray-200 dark:hover:bg-slate-700 transition-colors flex-shrink-0\"\n            title={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n          >\n            <svg \n              className={classNames(\n                'w-4 h-4 text-gray-600 dark:text-gray-400 transition-transform duration-200',\n                { 'rotate-180': isCollapsed }\n              )} \n              fill=\"none\" \n              stroke=\"currentColor\" \n              viewBox=\"0 0 24 24\"\n            >\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n            </svg>\n          </button>\n        )}\n      </div>\n\n      {/* Search Bar */}\n      {showSearch && !isCollapsed && (\n        <div className=\"relative\">\n          <div className={classNames(\n            'relative flex items-center transition-all duration-200',\n            {\n              'ring-2 ring-blue-500 dark:ring-blue-400': isSearchFocused,\n            }\n          )}>\n            {/* Search Icon */}\n            <div className=\"absolute left-3 pointer-events-none\">\n              <svg className=\"w-4 h-4 text-gray-400 dark:text-gray-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n              </svg>\n            </div>\n\n            {/* Search Input */}\n            <input\n              type=\"text\"\n              value={searchQuery}\n              onChange={handleSearchChange}\n              onFocus={() => setIsSearchFocused(true)}\n              onBlur={() => setIsSearchFocused(false)}\n              placeholder=\"Search recommendations...\"\n              className={classNames(\n                'w-full pl-10 pr-10 py-2 text-sm bg-white dark:bg-slate-900 border border-gray-300 dark:border-slate-600 rounded-lg',\n                'placeholder-gray-400 dark:placeholder-gray-500 text-gray-900 dark:text-gray-100',\n                'focus:outline-none focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 focus:border-transparent',\n                'transition-all duration-200'\n              )}\n            />\n\n            {/* Clear Button */}\n            {searchQuery && (\n              <button\n                onClick={handleSearchClear}\n                className=\"absolute right-3 p-0.5 rounded-full hover:bg-gray-200 dark:hover:bg-slate-700 transition-colors\"\n                title=\"Clear search\"\n              >\n                <svg className=\"w-3 h-3 text-gray-400 dark:text-gray-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                  <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n                </svg>\n              </button>\n            )}\n          </div>\n\n          {/* Search Results Count */}\n          {searchQuery && (\n            <div className=\"mt-2 text-xs text-gray-500 dark:text-gray-400\">\n              Search results will be filtered in real-time\n            </div>\n          )}\n        </div>\n      )}\n\n      {/* Quick Stats */}\n      {!isCollapsed && (\n        <div className=\"mt-3 flex items-center gap-4 text-xs text-gray-500 dark:text-gray-400\">\n          <div className=\"flex items-center gap-1\">\n            <div className=\"w-2 h-2 bg-green-500 rounded-full\"></div>\n            <span>Live recommendations</span>\n          </div>\n          <div className=\"flex items-center gap-1\">\n            <svg className=\"w-3 h-3\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n            </svg>\n            <span>AI-powered</span>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n","import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshSidebarContentProps } from '../types/index';\nimport { AdMeshInlineRecommendation } from './AdMeshInlineRecommendation';\nimport { AdMeshProductCard } from './AdMeshProductCard';\n\nexport const AdMeshSidebarContent: React.FC<AdMeshSidebarContentProps> = ({\n  recommendations,\n  displayMode,\n  theme,\n  maxRecommendations,\n  onRecommendationClick,\n  className\n}) => {\n  const [showFilters, setShowFilters] = useState(false);\n  const [activeTab, setActiveTab] = useState<'all' | 'top' | 'recent'>('all');\n\n  const displayRecommendations = maxRecommendations \n    ? recommendations.slice(0, maxRecommendations)\n    : recommendations;\n\n  const getTabRecommendations = () => {\n    switch (activeTab) {\n      case 'top':\n        return displayRecommendations\n          .filter(rec => rec.intent_match_score >= 0.8)\n          .slice(0, 5);\n      case 'recent':\n        return displayRecommendations.slice(0, 3);\n      default:\n        return displayRecommendations;\n    }\n  };\n\n  const tabRecommendations = getTabRecommendations();\n\n  const contentClasses = classNames(\n    'admesh-sidebar-content',\n    'flex flex-col h-full',\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  const renderRecommendations = () => {\n    if (tabRecommendations.length === 0) {\n      return (\n        <div className=\"flex-1 flex flex-col items-center justify-center p-6 text-center\">\n          <div className=\"w-16 h-16 bg-gray-100 dark:bg-slate-800 rounded-full flex items-center justify-center mb-4\">\n            <svg className=\"w-8 h-8 text-gray-400 dark:text-gray-500\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n            </svg>\n          </div>\n          <h4 className=\"text-sm font-medium text-gray-900 dark:text-gray-100 mb-2\">\n            No recommendations found\n          </h4>\n          <p className=\"text-xs text-gray-500 dark:text-gray-400\">\n            Try adjusting your search or filters\n          </p>\n        </div>\n      );\n    }\n\n    switch (displayMode) {\n      case 'recommendations':\n        return (\n          <div className=\"space-y-3\">\n            {tabRecommendations.map((recommendation, index) => (\n              <AdMeshInlineRecommendation\n                key={recommendation.ad_id || index}\n                recommendation={recommendation}\n                theme={theme}\n                compact={true}\n                showReason={true}\n                onClick={onRecommendationClick}\n              />\n            ))}\n          </div>\n        );\n\n      case 'history':\n        return (\n          <div className=\"space-y-2\">\n            {tabRecommendations.map((recommendation, index) => (\n              <div key={recommendation.ad_id || index} className=\"flex items-center gap-3 p-2 rounded-lg hover:bg-gray-50 dark:hover:bg-slate-800 transition-colors\">\n                <div className=\"w-2 h-2 bg-gray-400 rounded-full flex-shrink-0\"></div>\n                <div className=\"flex-1 min-w-0\">\n                  <div className=\"text-sm font-medium text-gray-900 dark:text-gray-100 truncate\">\n                    {recommendation.title}\n                  </div>\n                  <div className=\"text-xs text-gray-500 dark:text-gray-400\">\n                    {Math.round(recommendation.intent_match_score * 100)}% match\n                  </div>\n                </div>\n              </div>\n            ))}\n          </div>\n        );\n\n      case 'favorites':\n        return (\n          <div className=\"space-y-3\">\n            {tabRecommendations.slice(0, 3).map((recommendation, index) => (\n              <div key={recommendation.ad_id || index} className=\"relative\">\n                <AdMeshInlineRecommendation\n                  recommendation={recommendation}\n                  theme={theme}\n                  compact={true}\n                  showReason={false}\n                  onClick={onRecommendationClick}\n                />\n                <button className=\"absolute top-2 right-2 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-slate-700 transition-colors\">\n                  <svg className=\"w-3 h-3 text-yellow-500\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\" />\n                  </svg>\n                </button>\n              </div>\n            ))}\n          </div>\n        );\n\n      case 'mixed':\n        return (\n          <div className=\"space-y-4\">\n            {/* Top recommendation as card */}\n            {tabRecommendations[0] && (\n              <div>\n                <h4 className=\"text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide mb-2\">\n                  Top Pick\n                </h4>\n                <AdMeshProductCard\n                  recommendation={tabRecommendations[0]}\n                  theme={theme}\n                  showMatchScore={true}\n                  showBadges={true}\n                  onClick={onRecommendationClick}\n                  className=\"text-xs\"\n                />\n              </div>\n            )}\n\n            {/* Other recommendations as inline */}\n            {tabRecommendations.slice(1).length > 0 && (\n              <div>\n                <h4 className=\"text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wide mb-2\">\n                  More Options\n                </h4>\n                <div className=\"space-y-2\">\n                  {tabRecommendations.slice(1, 4).map((recommendation, index) => (\n                    <AdMeshInlineRecommendation\n                      key={recommendation.ad_id || index}\n                      recommendation={recommendation}\n                      theme={theme}\n                      compact={true}\n                      showReason={false}\n                      onClick={onRecommendationClick}\n                    />\n                  ))}\n                </div>\n              </div>\n            )}\n          </div>\n        );\n\n      default:\n        return (\n          <div className=\"space-y-3\">\n            {tabRecommendations.map((recommendation, index) => (\n              <AdMeshInlineRecommendation\n                key={recommendation.ad_id || index}\n                recommendation={recommendation}\n                theme={theme}\n                compact={true}\n                showReason={true}\n                onClick={onRecommendationClick}\n              />\n            ))}\n          </div>\n        );\n    }\n  };\n\n  return (\n    <div\n      className={contentClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Tabs */}\n      <div className=\"flex border-b border-gray-200 dark:border-slate-700 bg-white dark:bg-slate-900\">\n        <button\n          onClick={() => setActiveTab('all')}\n          className={classNames(\n            'flex-1 px-3 py-2 text-xs font-medium transition-colors',\n            activeTab === 'all'\n              ? 'text-blue-600 dark:text-blue-400 border-b-2 border-blue-600 dark:border-blue-400'\n              : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300'\n          )}\n        >\n          All ({recommendations.length})\n        </button>\n        <button\n          onClick={() => setActiveTab('top')}\n          className={classNames(\n            'flex-1 px-3 py-2 text-xs font-medium transition-colors',\n            activeTab === 'top'\n              ? 'text-blue-600 dark:text-blue-400 border-b-2 border-blue-600 dark:border-blue-400'\n              : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300'\n          )}\n        >\n          Top\n        </button>\n        <button\n          onClick={() => setActiveTab('recent')}\n          className={classNames(\n            'flex-1 px-3 py-2 text-xs font-medium transition-colors',\n            activeTab === 'recent'\n              ? 'text-blue-600 dark:text-blue-400 border-b-2 border-blue-600 dark:border-blue-400'\n              : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300'\n          )}\n        >\n          Recent\n        </button>\n      </div>\n\n      {/* Content */}\n      <div className=\"flex-1 overflow-y-auto p-4\">\n        {renderRecommendations()}\n      </div>\n\n      {/* Quick Actions */}\n      <div className=\"p-3 border-t border-gray-200 dark:border-slate-700 bg-gray-50 dark:bg-slate-800\">\n        <div className=\"flex items-center justify-between text-xs\">\n          <span className=\"text-gray-500 dark:text-gray-400\">\n            {tabRecommendations.length} recommendation{tabRecommendations.length !== 1 ? 's' : ''}\n          </span>\n          <button\n            onClick={() => setShowFilters(!showFilters)}\n            className=\"text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 transition-colors\"\n          >\n            Filters\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshSidebarProps, SidebarFilters } from '../types/index';\nimport { AdMeshSidebarHeader } from './AdMeshSidebarHeader';\nimport { AdMeshSidebarContent } from './AdMeshSidebarContent';\n\nexport const AdMeshSidebar: React.FC<AdMeshSidebarProps> = ({\n  recommendations,\n  config,\n  theme,\n  title = 'Recommendations',\n  isOpen = true,\n  onToggle,\n  onRecommendationClick,\n  onSearch,\n  // onFilter,\n  className\n}) => {\n  const [isCollapsed, setIsCollapsed] = useState(config.defaultCollapsed || false);\n  const [searchQuery, setSearchQuery] = useState('');\n  const [filters] = useState<SidebarFilters>({});\n\n  // Handle auto-refresh if enabled\n  useEffect(() => {\n    if (config.autoRefresh && config.refreshInterval) {\n      const interval = setInterval(() => {\n        // Trigger a refresh - in a real app this would refetch recommendations\n        console.log('Auto-refreshing recommendations...');\n      }, config.refreshInterval);\n\n      return () => clearInterval(interval);\n    }\n  }, [config.autoRefresh, config.refreshInterval]);\n\n  // Filter recommendations based on search and filters\n  const filteredRecommendations = useMemo(() => {\n    let filtered = [...recommendations];\n\n    // Apply search filter\n    if (searchQuery.trim()) {\n      const query = searchQuery.toLowerCase();\n      filtered = filtered.filter(rec => \n        rec.title.toLowerCase().includes(query) ||\n        rec.reason.toLowerCase().includes(query) ||\n        rec.keywords?.some(keyword => keyword.toLowerCase().includes(query))\n      );\n    }\n\n    // Apply category filter\n    if (filters.categories && filters.categories.length > 0) {\n      filtered = filtered.filter(rec => \n        rec.categories?.some(cat => filters.categories?.includes(cat))\n      );\n    }\n\n    // Apply free tier filter\n    if (filters.hasFreeTier) {\n      filtered = filtered.filter(rec => rec.has_free_tier);\n    }\n\n    // Apply trial filter\n    if (filters.hasTrial) {\n      filtered = filtered.filter(rec => rec.trial_days && rec.trial_days > 0);\n    }\n\n    // Apply minimum match score filter\n    if (filters.minMatchScore !== undefined) {\n      filtered = filtered.filter(rec => rec.intent_match_score >= filters.minMatchScore!);\n    }\n\n    // Sort by match score (highest first)\n    filtered.sort((a, b) => b.intent_match_score - a.intent_match_score);\n\n    // Limit results\n    if (config.maxRecommendations) {\n      filtered = filtered.slice(0, config.maxRecommendations);\n    }\n\n    return filtered;\n  }, [recommendations, searchQuery, filters, config.maxRecommendations]);\n\n  const handleToggle = () => {\n    if (config.collapsible) {\n      setIsCollapsed(!isCollapsed);\n      onToggle?.();\n    }\n  };\n\n  const handleSearch = (query: string) => {\n    setSearchQuery(query);\n    onSearch?.(query);\n  };\n\n  // const handleFilter = (newFilters: SidebarFilters) => {\n  //   setFilters(newFilters);\n  //   onFilter?.(newFilters);\n  // };\n\n  // Get sidebar width based on size\n  const getSidebarWidth = () => {\n    switch (config.size) {\n      case 'sm': return isCollapsed ? 'w-12' : 'w-64';\n      case 'md': return isCollapsed ? 'w-12' : 'w-80';\n      case 'lg': return isCollapsed ? 'w-12' : 'w-96';\n      case 'xl': return isCollapsed ? 'w-12' : 'w-[28rem]';\n      default: return isCollapsed ? 'w-12' : 'w-80';\n    }\n  };\n\n  const sidebarClasses = classNames(\n    'admesh-sidebar',\n    'flex flex-col bg-white dark:bg-slate-900 border-gray-200 dark:border-slate-700 shadow-lg transition-all duration-300 ease-in-out',\n    getSidebarWidth(),\n    {\n      'border-r': config.position === 'left',\n      'border-l': config.position === 'right',\n      'fixed top-0 bottom-0 z-50': true,\n      'left-0': config.position === 'left',\n      'right-0': config.position === 'right',\n      'transform -translate-x-full': config.position === 'left' && !isOpen,\n      'transform translate-x-full': config.position === 'right' && !isOpen,\n    },\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  if (!isOpen && !config.collapsible) {\n    return null;\n  }\n\n  return (\n    <>\n      {/* Overlay for mobile */}\n      {isOpen && !isCollapsed && (\n        <div \n          className=\"fixed inset-0 bg-black bg-opacity-50 z-40 lg:hidden\"\n          onClick={() => onToggle?.()}\n        />\n      )}\n\n      {/* Sidebar */}\n      <div\n        className={sidebarClasses}\n        style={containerStyle}\n        data-admesh-theme={theme?.mode}\n        data-sidebar-position={config.position}\n        data-sidebar-size={config.size}\n      >\n        {/* Header */}\n        {config.showHeader !== false && (\n          <AdMeshSidebarHeader\n            title={title}\n            theme={theme}\n            collapsible={config.collapsible}\n            isCollapsed={isCollapsed}\n            onToggle={handleToggle}\n            onSearch={config.showSearch ? handleSearch : undefined}\n            showSearch={config.showSearch && !isCollapsed}\n          />\n        )}\n\n        {/* Content */}\n        {!isCollapsed && (\n          <AdMeshSidebarContent\n            recommendations={filteredRecommendations}\n            displayMode={config.displayMode}\n            theme={theme}\n            maxRecommendations={config.maxRecommendations}\n            onRecommendationClick={onRecommendationClick}\n            className=\"flex-1 overflow-hidden\"\n          />\n        )}\n\n        {/* Collapsed state indicator */}\n        {isCollapsed && config.collapsible && (\n          <div className=\"flex-1 flex flex-col items-center justify-center p-2\">\n            <button\n              onClick={handleToggle}\n              className=\"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-slate-800 transition-colors\"\n              title=\"Expand sidebar\"\n            >\n              <svg className=\"w-5 h-5 text-gray-600 dark:text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n              </svg>\n            </button>\n            <div className=\"mt-4 text-xs text-gray-500 dark:text-gray-400 transform -rotate-90 whitespace-nowrap\">\n              {filteredRecommendations.length}\n            </div>\n          </div>\n        )}\n\n        {/* Powered by AdMesh */}\n        {!isCollapsed && (\n          <div className=\"p-3 border-t border-gray-200 dark:border-slate-700\">\n            <div className=\"text-xs text-gray-400 dark:text-gray-500 text-center\">\n              Powered by AdMesh\n            </div>\n          </div>\n        )}\n      </div>\n    </>\n  );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshChatMessageProps } from '../types/index';\nimport { AdMeshConversationalUnit } from './AdMeshConversationalUnit';\n\nexport const AdMeshChatMessage: React.FC<AdMeshChatMessageProps> = ({\n  message,\n  theme,\n  onRecommendationClick,\n  className\n}) => {\n  const isUser = message.role === 'user';\n  const isAssistant = message.role === 'assistant';\n\n  const messageClasses = classNames(\n    'admesh-chat-message',\n    'flex items-start gap-3',\n    {\n      'flex-row-reverse': isUser,\n    },\n    className\n  );\n\n  const bubbleClasses = classNames(\n    'max-w-xs lg:max-w-sm px-4 py-3 rounded-lg text-sm',\n    {\n      'bg-gradient-to-r from-blue-600 to-indigo-600 text-white': isUser,\n      'bg-gray-100 dark:bg-slate-800 text-gray-900 dark:text-gray-100': isAssistant,\n      'bg-yellow-100 dark:bg-yellow-900 text-yellow-900 dark:text-yellow-100': message.role === 'system',\n    }\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  const formatTime = (timestamp: Date) => {\n    return timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n  };\n\n  return (\n    <div\n      className={messageClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Avatar */}\n      {!isUser && (\n        <div className=\"w-8 h-8 bg-gradient-to-br from-blue-600 to-indigo-600 rounded-full flex items-center justify-center flex-shrink-0\">\n          <svg className=\"w-4 h-4 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n          </svg>\n        </div>\n      )}\n\n      {isUser && (\n        <div className=\"w-8 h-8 bg-gray-300 dark:bg-slate-600 rounded-full flex items-center justify-center flex-shrink-0\">\n          <svg className=\"w-4 h-4 text-gray-600 dark:text-gray-300\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n          </svg>\n        </div>\n      )}\n\n      {/* Message Content */}\n      <div className={`flex flex-col ${isUser ? 'items-end' : 'items-start'} flex-1`}>\n        {/* Message Bubble */}\n        <div className={bubbleClasses}>\n          <div className=\"whitespace-pre-wrap break-words\">\n            {message.content}\n          </div>\n        </div>\n\n        {/* Timestamp */}\n        <div className={classNames(\n          'text-xs text-gray-500 dark:text-gray-400 mt-1',\n          { 'text-right': isUser }\n        )}>\n          {formatTime(message.timestamp)}\n        </div>\n\n        {/* Recommendations */}\n        {message.recommendations && message.recommendations.length > 0 && (\n          <div className=\"mt-3 w-full max-w-lg\">\n            {/* Recommendations Header */}\n            <div className=\"flex items-center gap-2 mb-3\">\n              <svg className=\"w-4 h-4 text-blue-600 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n              </svg>\n              <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n                {message.recommendations.length} recommendation{message.recommendations.length > 1 ? 's' : ''} found\n              </span>\n            </div>\n\n            {/* Recommendations Display */}\n            <AdMeshConversationalUnit\n              recommendations={message.recommendations}\n              config={{\n                displayMode: 'inline',\n                context: 'chat',\n                maxRecommendations: 3,\n                showPoweredBy: false,\n                autoShow: true,\n                delayMs: 300\n              }}\n              theme={theme}\n              onRecommendationClick={onRecommendationClick}\n              className=\"bg-gray-50 dark:bg-slate-800/50 rounded-lg p-3 border border-gray-200 dark:border-slate-700\"\n            />\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n","import React, { useState, useRef, KeyboardEvent } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshChatInputProps } from '../types/index';\n\nexport const AdMeshChatInput: React.FC<AdMeshChatInputProps> = ({\n  placeholder = \"Type your message...\",\n  disabled = false,\n  suggestions = [],\n  theme,\n  onSendMessage,\n  className\n}) => {\n  const [message, setMessage] = useState('');\n  const [showSuggestions, setShowSuggestions] = useState(false);\n  const [filteredSuggestions, setFilteredSuggestions] = useState<string[]>([]);\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n    const value = e.target.value;\n    setMessage(value);\n\n    // Filter suggestions based on input\n    if (value.trim() && suggestions.length > 0) {\n      const filtered = suggestions.filter(suggestion =>\n        suggestion.toLowerCase().includes(value.toLowerCase())\n      );\n      setFilteredSuggestions(filtered);\n      setShowSuggestions(filtered.length > 0);\n    } else {\n      setShowSuggestions(false);\n    }\n\n    // Auto-resize textarea\n    if (inputRef.current) {\n      inputRef.current.style.height = 'auto';\n      inputRef.current.style.height = `${Math.min(inputRef.current.scrollHeight, 120)}px`;\n    }\n  };\n\n  const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n    if (e.key === 'Enter' && !e.shiftKey) {\n      e.preventDefault();\n      handleSend();\n    }\n  };\n\n  const handleSend = () => {\n    const trimmedMessage = message.trim();\n    if (trimmedMessage && !disabled && onSendMessage) {\n      onSendMessage(trimmedMessage);\n      setMessage('');\n      setShowSuggestions(false);\n      \n      // Reset textarea height\n      if (inputRef.current) {\n        inputRef.current.style.height = 'auto';\n      }\n    }\n  };\n\n  const handleSuggestionClick = (suggestion: string) => {\n    setMessage(suggestion);\n    setShowSuggestions(false);\n    if (inputRef.current) {\n      inputRef.current.focus();\n    }\n  };\n\n  const containerClasses = classNames(\n    'admesh-chat-input',\n    'relative',\n    className\n  );\n\n  const inputClasses = classNames(\n    'w-full resize-none rounded-lg border border-gray-300 dark:border-slate-600',\n    'bg-white dark:bg-slate-800 text-gray-900 dark:text-gray-100',\n    'placeholder-gray-500 dark:placeholder-gray-400',\n    'focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 focus:border-transparent',\n    'transition-all duration-200 scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-slate-600',\n    'pr-12 pl-4 py-3 text-sm leading-5',\n    {\n      'opacity-50 cursor-not-allowed': disabled,\n    }\n  );\n\n  const sendButtonClasses = classNames(\n    'absolute right-2 bottom-2 p-2 rounded-lg transition-all duration-200',\n    'flex items-center justify-center',\n    {\n      'bg-blue-600 hover:bg-blue-700 text-white': message.trim() && !disabled,\n      'bg-gray-200 dark:bg-slate-700 text-gray-400 dark:text-gray-500 cursor-not-allowed': !message.trim() || disabled,\n    }\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Suggestions Dropdown */}\n      {showSuggestions && filteredSuggestions.length > 0 && (\n        <div className=\"absolute bottom-full left-0 right-0 mb-2 bg-white dark:bg-slate-800 border border-gray-200 dark:border-slate-700 rounded-lg shadow-lg max-h-40 overflow-y-auto z-10\">\n          {filteredSuggestions.slice(0, 5).map((suggestion, index) => (\n            <button\n              key={index}\n              onClick={() => handleSuggestionClick(suggestion)}\n              className=\"w-full text-left px-4 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-slate-700 transition-colors first:rounded-t-lg last:rounded-b-lg\"\n            >\n              {suggestion}\n            </button>\n          ))}\n        </div>\n      )}\n\n      {/* Input Container */}\n      <div className=\"relative\">\n        <textarea\n          ref={inputRef}\n          value={message}\n          onChange={handleInputChange}\n          onKeyDown={handleKeyDown}\n          placeholder={placeholder}\n          disabled={disabled}\n          rows={1}\n          className={inputClasses}\n          style={{ minHeight: '44px', maxHeight: '120px' }}\n        />\n\n        {/* Send Button */}\n        <button\n          onClick={handleSend}\n          disabled={!message.trim() || disabled}\n          className={sendButtonClasses}\n          aria-label=\"Send message\"\n        >\n          <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\" />\n          </svg>\n        </button>\n      </div>\n\n      {/* Helper Text */}\n      <div className=\"flex items-center justify-between mt-2 text-xs text-gray-500 dark:text-gray-400\">\n        <span>Press Enter to send, Shift+Enter for new line</span>\n        <span className={classNames(\n          'transition-opacity duration-200',\n          { 'opacity-0': message.length < 100 }\n        )}>\n          {message.length}/500\n        </span>\n      </div>\n    </div>\n  );\n};\n","import React, { useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshChatInterfaceProps } from '../types/index';\nimport { AdMeshChatMessage } from './AdMeshChatMessage';\nimport { AdMeshChatInput } from './AdMeshChatInput';\n\nexport const AdMeshChatInterface: React.FC<AdMeshChatInterfaceProps> = ({\n  messages,\n  config,\n  theme,\n  isLoading = false,\n  onSendMessage,\n  onRecommendationClick,\n  className\n}) => {\n  const messagesEndRef = useRef<HTMLDivElement>(null);\n  const messagesContainerRef = useRef<HTMLDivElement>(null);\n\n  // Auto-scroll to bottom when new messages arrive\n  useEffect(() => {\n    if (messagesEndRef.current) {\n      messagesEndRef.current.scrollIntoView({ behavior: 'smooth' });\n    }\n  }, [messages]);\n\n  const containerClasses = classNames(\n    'admesh-chat-interface',\n    'flex flex-col h-full bg-white dark:bg-slate-900',\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  // Limit messages if maxMessages is set\n  const displayMessages = config.maxMessages \n    ? messages.slice(-config.maxMessages)\n    : messages;\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Messages Area */}\n      <div \n        ref={messagesContainerRef}\n        className=\"flex-1 overflow-y-auto p-4 space-y-4 scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-slate-600\"\n      >\n        {displayMessages.length === 0 ? (\n          <div className=\"flex flex-col items-center justify-center h-full text-center\">\n            <div className=\"w-16 h-16 bg-gradient-to-br from-blue-100 to-indigo-100 dark:from-blue-900 dark:to-indigo-900 rounded-full flex items-center justify-center mb-4\">\n              <svg className=\"w-8 h-8 text-blue-600 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n              </svg>\n            </div>\n            <h3 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100 mb-2\">\n              Welcome to AdMesh AI\n            </h3>\n            <p className=\"text-sm text-gray-600 dark:text-gray-400 max-w-xs\">\n              Ask me anything about products, tools, or services. I'll provide personalized recommendations just for you!\n            </p>\n          </div>\n        ) : (\n          <>\n            {displayMessages.map((message) => (\n              <AdMeshChatMessage\n                key={message.id}\n                message={message}\n                theme={theme}\n                onRecommendationClick={onRecommendationClick}\n              />\n            ))}\n\n            {/* Typing Indicator */}\n            {isLoading && config.enableTypingIndicator !== false && (\n              <div className=\"flex items-start gap-3\">\n                <div className=\"w-8 h-8 bg-gradient-to-br from-blue-600 to-indigo-600 rounded-full flex items-center justify-center flex-shrink-0\">\n                  <svg className=\"w-4 h-4 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n                  </svg>\n                </div>\n                <div className=\"bg-gray-100 dark:bg-slate-800 rounded-lg px-4 py-3 max-w-xs\">\n                  <div className=\"flex space-x-1\">\n                    <div className=\"w-2 h-2 bg-gray-400 dark:bg-gray-500 rounded-full animate-bounce\"></div>\n                    <div className=\"w-2 h-2 bg-gray-400 dark:bg-gray-500 rounded-full animate-bounce\" style={{ animationDelay: '0.1s' }}></div>\n                    <div className=\"w-2 h-2 bg-gray-400 dark:bg-gray-500 rounded-full animate-bounce\" style={{ animationDelay: '0.2s' }}></div>\n                  </div>\n                </div>\n              </div>\n            )}\n\n            <div ref={messagesEndRef} />\n          </>\n        )}\n      </div>\n\n      {/* Quick Suggestions */}\n      {config.enableSuggestions && config.suggestions && config.suggestions.length > 0 && messages.length === 0 && (\n        <div className=\"px-4 pb-2\">\n          <div className=\"text-xs text-gray-500 dark:text-gray-400 mb-2\">Quick suggestions:</div>\n          <div className=\"flex flex-wrap gap-2\">\n            {config.suggestions.slice(0, 3).map((suggestion, index) => (\n              <button\n                key={index}\n                onClick={() => onSendMessage?.(suggestion)}\n                className=\"px-3 py-1.5 text-xs bg-gray-100 dark:bg-slate-800 hover:bg-gray-200 dark:hover:bg-slate-700 text-gray-700 dark:text-gray-300 rounded-full transition-colors\"\n              >\n                {suggestion}\n              </button>\n            ))}\n          </div>\n        </div>\n      )}\n\n      {/* Input Area */}\n      {config.showInputField !== false && onSendMessage && (\n        <div className=\"border-t border-gray-200 dark:border-slate-700 p-4\">\n          <AdMeshChatInput\n            placeholder={config.placeholder || \"Ask me about products, tools, or services...\"}\n            disabled={isLoading}\n            suggestions={config.suggestions}\n            theme={theme}\n            onSendMessage={onSendMessage}\n          />\n        </div>\n      )}\n    </div>\n  );\n};\n","import React, { useState, useEffect } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshFloatingChatProps, ChatMessage } from '../types/index';\nimport { AdMeshChatInterface } from './AdMeshChatInterface';\n\nexport const AdMeshFloatingChat: React.FC<AdMeshFloatingChatProps> = ({\n  config,\n  theme,\n  title = 'AI Assistant',\n  subtitle = 'Get personalized recommendations',\n  isOpen: controlledIsOpen,\n  onToggle,\n  onSendMessage,\n  onRecommendationClick,\n  autoRecommendations,\n  autoRecommendationTrigger,\n  showInputField = true,\n  autoShowRecommendations = false,\n  onAutoRecommendationDismiss,\n  className\n}) => {\n  const [internalIsOpen, setInternalIsOpen] = useState(config.autoOpen || false);\n  const [messages, setMessages] = useState<ChatMessage[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [hasInteracted, setHasInteracted] = useState(false);\n\n  const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalIsOpen;\n\n  // Initialize with welcome message\n  useEffect(() => {\n    if (config.showWelcomeMessage && config.welcomeMessage && messages.length === 0) {\n      const welcomeMessage: ChatMessage = {\n        id: 'welcome',\n        role: 'assistant',\n        content: config.welcomeMessage,\n        timestamp: new Date(),\n      };\n      setMessages([welcomeMessage]);\n    }\n  }, [config.showWelcomeMessage, config.welcomeMessage, messages.length]);\n\n  // Handle auto-recommendations\n  useEffect(() => {\n    if (autoRecommendations && autoRecommendations.length > 0 && autoShowRecommendations) {\n      const autoMessage: ChatMessage = {\n        id: `auto-${Date.now()}`,\n        role: 'assistant',\n        content: autoRecommendationTrigger\n          ? `Based on \"${autoRecommendationTrigger}\", here are some relevant recommendations:`\n          : 'I found some relevant recommendations for you:',\n        timestamp: new Date(),\n        recommendations: autoRecommendations,\n      };\n\n      // Auto-open the chat and show recommendations\n      if (controlledIsOpen === undefined) {\n        setInternalIsOpen(true);\n      }\n\n      // Add the auto-recommendation message\n      setMessages(prev => {\n        // Avoid duplicating auto-recommendations\n        const hasAutoMessage = prev.some(msg => msg.id.startsWith('auto-'));\n        if (hasAutoMessage) {\n          return prev.map(msg =>\n            msg.id.startsWith('auto-') ? autoMessage : msg\n          );\n        }\n        return [...prev, autoMessage];\n      });\n    }\n  }, [autoRecommendations, autoShowRecommendations, autoRecommendationTrigger, controlledIsOpen]);\n\n  const handleToggle = () => {\n    if (onToggle) {\n      onToggle();\n    } else {\n      setInternalIsOpen(!internalIsOpen);\n    }\n    setHasInteracted(true);\n  };\n\n  const handleSendMessage = async (messageContent: string) => {\n    if (!onSendMessage) return;\n\n    // Add user message\n    const userMessage: ChatMessage = {\n      id: `user-${Date.now()}`,\n      role: 'user',\n      content: messageContent,\n      timestamp: new Date(),\n    };\n\n    setMessages(prev => [...prev, userMessage]);\n    setIsLoading(true);\n\n    try {\n      // Get AI response\n      const assistantMessage = await onSendMessage(messageContent);\n      setMessages(prev => [...prev, assistantMessage]);\n    } catch (error) {\n      console.error('Error sending message:', error);\n      const errorMessage: ChatMessage = {\n        id: `error-${Date.now()}`,\n        role: 'assistant',\n        content: 'Sorry, I encountered an error. Please try again.',\n        timestamp: new Date(),\n      };\n      setMessages(prev => [...prev, errorMessage]);\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  // Get chat dimensions based on size\n  const getChatDimensions = () => {\n    switch (config.size) {\n      case 'sm': return 'w-80 h-96';\n      case 'md': return 'w-96 h-[32rem]';\n      case 'lg': return 'w-[28rem] h-[36rem]';\n      case 'xl': return 'w-[32rem] h-[40rem]';\n      default: return 'w-96 h-[32rem]';\n    }\n  };\n\n  // Get position classes\n  const getPositionClasses = () => {\n    switch (config.position) {\n      case 'bottom-right': return 'bottom-4 right-4';\n      case 'bottom-left': return 'bottom-4 left-4';\n      case 'top-right': return 'top-4 right-4';\n      case 'top-left': return 'top-4 left-4';\n      default: return 'bottom-4 right-4';\n    }\n  };\n\n  const containerClasses = classNames(\n    'admesh-floating-chat',\n    'fixed z-50 transition-all duration-300 ease-in-out',\n    getPositionClasses(),\n    className\n  );\n\n  const chatClasses = classNames(\n    'bg-white dark:bg-slate-900 rounded-lg shadow-2xl border border-gray-200 dark:border-slate-700 overflow-hidden',\n    getChatDimensions(),\n    {\n      'opacity-0 scale-95 pointer-events-none': !isOpen,\n      'opacity-100 scale-100': isOpen,\n    }\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      {/* Chat Interface */}\n      <div className={chatClasses}>\n        {isOpen && (\n          <>\n            {/* Header */}\n            <div className=\"flex items-center justify-between p-4 bg-gradient-to-r from-blue-600 to-indigo-600 text-white\">\n              <div className=\"flex items-center gap-3\">\n                <div className=\"w-8 h-8 bg-white bg-opacity-20 rounded-full flex items-center justify-center\">\n                  <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n                  </svg>\n                </div>\n                <div>\n                  <h3 className=\"font-semibold text-sm\">{title}</h3>\n                  <p className=\"text-xs text-blue-100\">{subtitle}</p>\n                </div>\n              </div>\n              <div className=\"flex items-center gap-2\">\n                {/* Dismiss auto-recommendations button */}\n                {autoRecommendations && autoRecommendations.length > 0 && onAutoRecommendationDismiss && (\n                  <button\n                    onClick={() => {\n                      onAutoRecommendationDismiss();\n                      setMessages(prev => prev.filter(msg => !msg.id.startsWith('auto-')));\n                    }}\n                    className=\"p-1 rounded-full hover:bg-white hover:bg-opacity-20 transition-colors\"\n                    aria-label=\"Dismiss recommendations\"\n                    title=\"Dismiss recommendations\"\n                  >\n                    <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                      <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21\" />\n                    </svg>\n                  </button>\n                )}\n\n                <button\n                  onClick={handleToggle}\n                  className=\"p-1 rounded-full hover:bg-white hover:bg-opacity-20 transition-colors\"\n                  aria-label=\"Close chat\"\n                >\n                  <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                    <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n                  </svg>\n                </button>\n              </div>\n            </div>\n\n            {/* Chat Interface */}\n            <AdMeshChatInterface\n              messages={messages}\n              config={{\n                ...config,\n                showInputField: showInputField\n              }}\n              theme={theme}\n              isLoading={isLoading}\n              onSendMessage={showInputField ? handleSendMessage : undefined}\n              onRecommendationClick={onRecommendationClick}\n              className=\"h-full\"\n            />\n          </>\n        )}\n      </div>\n\n      {/* Chat Toggle Button */}\n      {!isOpen && (\n        <button\n          onClick={handleToggle}\n          className={classNames(\n            'w-14 h-14 bg-gradient-to-r from-blue-600 to-indigo-600 hover:from-blue-700 hover:to-indigo-700',\n            'text-white rounded-full shadow-lg hover:shadow-xl transition-all duration-200',\n            'flex items-center justify-center relative'\n          )}\n          aria-label=\"Open chat\"\n        >\n          <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\n          </svg>\n          \n          {/* Notification dot for new users */}\n          {!hasInteracted && (\n            <div className=\"absolute -top-1 -right-1 w-3 h-3 bg-red-500 rounded-full animate-pulse\"></div>\n          )}\n        </button>\n      )}\n\n      {/* Powered by AdMesh */}\n      {isOpen && (\n        <div className=\"absolute bottom-2 right-2 text-xs text-gray-400 dark:text-gray-500 bg-white dark:bg-slate-900 px-2 py-1 rounded shadow-sm\">\n          Powered by AdMesh\n        </div>\n      )}\n    </div>\n  );\n};\n","import React, { useState, useEffect } from 'react';\nimport classNames from 'classnames';\nimport type { AdMeshRecommendation, AdMeshTheme } from '../types/index';\nimport { AdMeshConversationalUnit } from './AdMeshConversationalUnit';\n\nexport interface AdMeshAutoRecommendationWidgetProps {\n  recommendations: AdMeshRecommendation[];\n  trigger?: string; // The query/context that triggered recommendations\n  theme?: AdMeshTheme;\n  title?: string;\n  position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n  size?: 'sm' | 'md' | 'lg';\n  autoShow?: boolean;\n  showDelay?: number; // Delay before showing (ms)\n  onRecommendationClick?: (adId: string, admeshLink: string) => void;\n  onDismiss?: () => void;\n  className?: string;\n}\n\nexport const AdMeshAutoRecommendationWidget: React.FC<AdMeshAutoRecommendationWidgetProps> = ({\n  recommendations,\n  trigger,\n  theme,\n  title = 'AI Recommendations',\n  position = 'bottom-right',\n  size = 'md',\n  autoShow = true,\n  showDelay = 1000,\n  onRecommendationClick,\n  onDismiss,\n  className\n}) => {\n  const [isVisible, setIsVisible] = useState(false);\n  const [hasAnimated, setHasAnimated] = useState(false);\n\n  // Auto-show with delay\n  useEffect(() => {\n    if (autoShow && recommendations.length > 0) {\n      const timer = setTimeout(() => {\n        setIsVisible(true);\n        setHasAnimated(true);\n      }, showDelay);\n\n      return () => clearTimeout(timer);\n    }\n  }, [autoShow, recommendations.length, showDelay]);\n\n  const handleDismiss = () => {\n    setIsVisible(false);\n    onDismiss?.();\n  };\n\n  // Get widget dimensions based on size\n  const getWidgetDimensions = () => {\n    switch (size) {\n      case 'sm': return 'w-72 max-h-80';\n      case 'md': return 'w-80 max-h-96';\n      case 'lg': return 'w-96 max-h-[28rem]';\n      default: return 'w-80 max-h-96';\n    }\n  };\n\n  // Get position classes\n  const getPositionClasses = () => {\n    switch (position) {\n      case 'bottom-right': return 'bottom-4 right-4';\n      case 'bottom-left': return 'bottom-4 left-4';\n      case 'top-right': return 'top-4 right-4';\n      case 'top-left': return 'top-4 left-4';\n      default: return 'bottom-4 right-4';\n    }\n  };\n\n  if (!isVisible || recommendations.length === 0) {\n    return null;\n  }\n\n  const containerClasses = classNames(\n    'admesh-auto-recommendation-widget',\n    'fixed z-50 transition-all duration-500 ease-out',\n    getPositionClasses(),\n    getWidgetDimensions(),\n    {\n      'opacity-0 scale-95 translate-y-2': !hasAnimated,\n      'opacity-100 scale-100 translate-y-0': hasAnimated,\n    },\n    className\n  );\n\n  const containerStyle = theme?.accentColor ? {\n    '--admesh-primary': theme.accentColor,\n  } as React.CSSProperties : undefined;\n\n  return (\n    <div\n      className={containerClasses}\n      style={containerStyle}\n      data-admesh-theme={theme?.mode}\n    >\n      <div className=\"bg-white dark:bg-slate-900 rounded-lg shadow-2xl border border-gray-200 dark:border-slate-700 overflow-hidden\">\n        {/* Header */}\n        <div className=\"flex items-center justify-between p-4 bg-gradient-to-r from-blue-600 to-indigo-600 text-white\">\n          <div className=\"flex items-center gap-3\">\n            <div className=\"w-8 h-8 bg-white bg-opacity-20 rounded-full flex items-center justify-center\">\n              <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n              </svg>\n            </div>\n            <div>\n              <h3 className=\"font-semibold text-sm\">{title}</h3>\n              {trigger && (\n                <p className=\"text-xs text-blue-100 truncate max-w-48\">\n                  Based on: \"{trigger}\"\n                </p>\n              )}\n            </div>\n          </div>\n          <button\n            onClick={handleDismiss}\n            className=\"p-1 rounded-full hover:bg-white hover:bg-opacity-20 transition-colors\"\n            aria-label=\"Dismiss recommendations\"\n          >\n            <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n              <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n            </svg>\n          </button>\n        </div>\n\n        {/* Content */}\n        <div className=\"p-4 max-h-80 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-slate-600\">\n          {/* Recommendations count */}\n          <div className=\"flex items-center gap-2 mb-3\">\n            <div className=\"w-2 h-2 bg-green-500 rounded-full animate-pulse\"></div>\n            <span className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n              {recommendations.length} intelligent match{recommendations.length > 1 ? 'es' : ''} found\n            </span>\n          </div>\n\n          {/* Recommendations */}\n          <AdMeshConversationalUnit\n            recommendations={recommendations}\n            config={{\n              displayMode: 'inline',\n              context: 'assistant',\n              maxRecommendations: 3,\n              showPoweredBy: false,\n              autoShow: true,\n              delayMs: 200\n            }}\n            theme={theme}\n            onRecommendationClick={onRecommendationClick}\n          />\n        </div>\n\n        {/* Footer */}\n        <div className=\"px-4 py-3 bg-gray-50 dark:bg-slate-800 border-t border-gray-200 dark:border-slate-700\">\n          <div className=\"flex items-center justify-between\">\n            <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n              Powered by AdMesh\n            </span>\n            <button\n              onClick={handleDismiss}\n              className=\"text-xs text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 transition-colors\"\n            >\n              Dismiss\n            </button>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n","// AdMesh UI SDK - Main Entry Point\n\n// Export all components\nexport {\n  AdMeshProductCard,\n  AdMeshCompareTable,\n  AdMeshBadge,\n  AdMeshLayout,\n  AdMeshLinkTracker,\n  AdMeshConversationalUnit,\n  AdMeshConversationSummary,\n  AdMeshInlineRecommendation,\n  AdMeshCitationUnit,\n  AdMeshCitationReference,\n  AdMeshSidebar,\n  AdMeshSidebarHeader,\n  AdMeshSidebarContent,\n  AdMeshFloatingChat,\n  AdMeshChatInterface,\n  AdMeshChatMessage,\n  AdMeshChatInput,\n  AdMeshAutoRecommendationWidget\n} from './components';\n\n// Export hooks\nexport {\n  useAdMeshTracker,\n  setAdMeshTrackerConfig,\n  buildAdMeshLink,\n  extractTrackingData\n} from './hooks/useAdMeshTracker';\n\nexport {\n  useAdMeshStyles\n} from './hooks/useAdMeshStyles';\n\n// Export types\nexport type {\n  AdMeshRecommendation,\n  AdMeshTheme,\n  IntentType,\n  BadgeType,\n  BadgeVariant,\n  BadgeSize,\n  TrackingData,\n  AdMeshProductCardProps,\n  AdMeshCompareTableProps,\n  AdMeshBadgeProps,\n  AdMeshLayoutProps,\n  AdMeshLinkTrackerProps,\n  UseAdMeshTrackerReturn,\n  AgentRecommendationResponse,\n  AdMeshConfig,\n  ConversationalDisplayMode,\n  ConversationContext,\n  ConversationalAdConfig,\n  AdMeshConversationalUnitProps,\n  AdMeshConversationSummaryProps,\n  AdMeshInlineRecommendationProps,\n  AdMeshCitationUnitProps,\n  AdMeshCitationReferenceProps,\n  SidebarPosition,\n  SidebarSize,\n  SidebarDisplayMode,\n  AdMeshSidebarConfig,\n  AdMeshSidebarProps,\n  SidebarFilters,\n  AdMeshSidebarHeaderProps,\n  AdMeshSidebarContentProps,\n  ChatMessageRole,\n  ChatPosition,\n  ChatSize,\n  ChatDisplayMode,\n  ChatMessage,\n  AdMeshChatConfig,\n  AdMeshFloatingChatProps,\n  AdMeshChatInterfaceProps,\n  AdMeshChatMessageProps,\n  AdMeshChatInputProps\n} from './types/index';\n\n// Version info\nexport const VERSION = '0.2.1';\n\n// Default configuration\nexport const DEFAULT_CONFIG = {\n  trackingEnabled: true,\n  debug: false,\n  theme: {\n    mode: 'light' as const,\n    accentColor: '#2563eb'\n  }\n};\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","hasOwn","classNames","classes","i","arg","appendClass","parseValue","newClass","module","DEFAULT_TRACKING_URL","globalConfig","setAdMeshTrackerConfig","useAdMeshTracker","isTracking","setIsTracking","useState","error","setError","mergedConfig","useMemo","log","useCallback","message","data","sendTrackingEvent","eventType","errorMsg","payload","lastError","attempt","response","result","err","resolve","trackClick","trackView","trackConversion","buildAdMeshLink","baseLink","adId","additionalParams","url","extractTrackingData","recommendation","additionalData","AdMeshLinkTracker","admeshLink","productId","onClick","trackingData","className","elementRef","useRef","hasTrackedView","useEffect","observer","entries","entry","handleClick","event","jsx","AdMeshProductCard","theme","showMatchScore","showBadges","badges","generatedBadges","aiKeywords","_a","keyword","ai","matchScorePercentage","cardClasses","cardStyle","jsxs","feature","j","integration","AdMeshCompareTable","recommendations","maxProducts","showMatchScores","showFeatures","onProductClick","productsToCompare","containerClasses","containerStyle","product","index","badgeTypeVariants","badgeTypeIcons","AdMeshBadge","variant","size","effectiveVariant","icon","badgeClasses","ADMESH_STYLES","stylesInjected","useAdMeshStyles","styleElement","existingStyle","selectOptimalLayout","intentType","autoLayout","productCount","hasFeatures","rec","hasPricing","AdMeshLayout","maxDisplayed","onTrackView","displayRecommendations","layout","AdMeshInlineRecommendation","compact","showReason","AdMeshConversationSummary","conversationSummary","showTopRecommendations","onRecommendationClick","onStartNewConversation","topRecommendations","a","b","AdMeshCitationReference","citationNumber","citationStyle","showTooltip","onHover","isHovered","setIsHovered","handleMouseEnter","handleMouseLeave","getCitationDisplay","citationClasses","AdMeshCitationUnit","conversationText","showCitationList","onCitationHover","hoveredRecommendation","setHoveredRecommendation","processedContent","processedText","citationMap","title","titleRegex","match","keywords","inserted","keywordRegex","renderTextWithCitations","text","part","citationMatch","AdMeshConversationalUnit","sessionId","onDismiss","isVisible","setIsVisible","hasAnimated","setHasAnimated","timer","maxRecommendations","handleRecommendationClick","handleDismiss","renderContent","AdMeshSidebarHeader","collapsible","isCollapsed","onToggle","onSearch","showSearch","searchQuery","setSearchQuery","isSearchFocused","setIsSearchFocused","handleSearchChange","e","handleSearchClear","headerClasses","AdMeshSidebarContent","displayMode","showFilters","setShowFilters","activeTab","setActiveTab","tabRecommendations","contentClasses","renderRecommendations","AdMeshSidebar","isOpen","setIsCollapsed","filters","interval","filteredRecommendations","filtered","query","cat","handleToggle","handleSearch","sidebarClasses","Fragment","AdMeshChatMessage","isUser","isAssistant","messageClasses","bubbleClasses","formatTime","timestamp","AdMeshChatInput","placeholder","disabled","suggestions","onSendMessage","setMessage","showSuggestions","setShowSuggestions","filteredSuggestions","setFilteredSuggestions","inputRef","handleInputChange","suggestion","handleKeyDown","handleSend","trimmedMessage","handleSuggestionClick","inputClasses","sendButtonClasses","AdMeshChatInterface","messages","isLoading","messagesEndRef","messagesContainerRef","displayMessages","AdMeshFloatingChat","subtitle","controlledIsOpen","autoRecommendations","autoRecommendationTrigger","showInputField","autoShowRecommendations","onAutoRecommendationDismiss","internalIsOpen","setInternalIsOpen","setMessages","setIsLoading","hasInteracted","setHasInteracted","welcomeMessage","autoMessage","prev","msg","handleSendMessage","messageContent","userMessage","assistantMessage","errorMessage","getChatDimensions","chatClasses","AdMeshAutoRecommendationWidget","trigger","position","autoShow","showDelay","getWidgetDimensions","getPositionClasses","VERSION","DEFAULT_CONFIG"],"mappings":"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Y,cAAc;AC9C1B,MAAMM,KAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","x_google_ignoreList":[0,1,2,3]}