{"version":3,"file":"ai.cjs","sources":["../../../node_modules/@tanstack/query-core/build/lib/mutationObserver.mjs","../../../node_modules/@tanstack/react-query/build/lib/useMutation.mjs","../src/ai/api/chat-rest-api.ts","../src/ai/api/chat-api-provider.tsx","../src/ai/chat-id-storage-provider.tsx","../src/ai/ai-context-provider.tsx","../src/ai/use-get-nlg-insights.ts","../src/ai/api/types.ts","../src/ai/use-get-nlq-result.ts","../src/ai/use-get-query-recommendations.ts","../src/ai/chat-config.tsx","../src/ai/api/chat-history.ts","../src/ai/api/hooks.ts","../src/ai/use-get-chat.tsx","../src/ai/use-last-nlq-response-from-history.tsx","../src/ai/use-chat-session.ts","../src/ai/use-last-nlq-response.ts","../src/ai/use-final-nlq-response.ts","../src/ai/chat-frame.tsx","../src/common/icons/loading-icon.tsx","../src/common/components/loading-spinner.tsx","../src/ai/icons/message-icon.tsx","../src/ai/icons/clear-chat-icon.tsx","../src/ai/common/dropup-section.tsx","../src/ai/chat-dropup.tsx","../src/ai/common/tooltip.tsx","../src/ai/common/constants.ts","../src/ai/chat-input.tsx","../../../node_modules/markdown-to-jsx/dist/index.modern.js","../src/ai/messages/text-message.tsx","../src/ai/messages/chat-welcome-message.tsx","../src/ai/common/error-container.tsx","../src/ai/icons/loading-dots-icon.tsx","../src/ai/messages/clickable-message.tsx","../src/ai/messages/clear-history-message.tsx","../../../node_modules/@mui/material/Dialog/dialogClasses.js","../../../node_modules/@mui/material/Dialog/DialogContext.js","../../../node_modules/@mui/material/Dialog/Dialog.js","../src/ai/icons/close-dialog-icon.tsx","../src/themes/colors.ts","../src/ai/common/icon-button.tsx","../src/ai/icons/expand-icon.tsx","../src/ai/icons/info-icon.tsx","../src/ai/icons/refresh-icon.tsx","../src/ai/messages/chart-message-toolbar.tsx","../src/ai/messages/chart-message.tsx","../src/ai/icons/thumbs-down-icon.tsx","../src/ai/buttons/thumbs-down-button.tsx","../src/ai/icons/thumbs-up-icon.tsx","../src/ai/buttons/thumbs-up-button.tsx","../src/common/hooks/use-hover.ts","../src/ai/messages/feedback-wrapper.tsx","../src/ai/common/collapsible.tsx","../src/ai/messages/insights-message.tsx","../src/ai/icons/light-bulb-icon.tsx","../src/ai/buttons/insights-button.tsx","../../../node_modules/lodash-es/lowerFirst.js","../src/ai/messages/nlq-message-group.tsx","../src/ai/messages/message-resolver.tsx","../src/ai/messages/message-list-resolver.tsx","../src/ai/icons/arrow-left-icon.tsx","../src/ai/nav-back-button.tsx","../src/ai/suggestions/suggestion-item.tsx","../src/ai/suggestions/suggestion-list.tsx","../src/ai/suggestions/suggestion-list-skeleton.tsx","../src/ai/suggestions/suggestions-with-intro.tsx","../src/ai/common/toolbar.tsx","../src/ai/ai-disclaimer.tsx","../src/ai/icons/scroll-to-bottom-icon.tsx","../src/ai/buttons/scroll-to-bottom-button.tsx","../src/ai/scroll-to-bottom.tsx","../src/ai/chat-box.tsx","../src/ai/data-topics/data-topic-item.tsx","../src/ai/data-topics/data-topic-list.tsx","../src/ai/icons/sisense-logo.tsx","../src/ai/chat-home.tsx","../src/ai/chat-router.tsx","../src/ai/chatbot.tsx","../src/ai/get-nlg-insights.tsx","../src/ai/icons/ai-icon.tsx","../src/ai/chart/chart-insights.tsx","../src/ai/chart/nlq-chart-widget.tsx","../src/ai/custom-ai-context-provider.tsx"],"sourcesContent":["import { getDefaultState } from './mutation.mjs';\nimport { notifyManager } from './notifyManager.mjs';\nimport { Subscribable } from './subscribable.mjs';\nimport { shallowEqualObjects } from './utils.mjs';\n\n// CLASS\nclass MutationObserver extends Subscribable {\n  constructor(client, options) {\n    super();\n    this.client = client;\n    this.setOptions(options);\n    this.bindMethods();\n    this.updateResult();\n  }\n\n  bindMethods() {\n    this.mutate = this.mutate.bind(this);\n    this.reset = this.reset.bind(this);\n  }\n\n  setOptions(options) {\n    var _this$currentMutation;\n\n    const prevOptions = this.options;\n    this.options = this.client.defaultMutationOptions(options);\n\n    if (!shallowEqualObjects(prevOptions, this.options)) {\n      this.client.getMutationCache().notify({\n        type: 'observerOptionsUpdated',\n        mutation: this.currentMutation,\n        observer: this\n      });\n    }\n\n    (_this$currentMutation = this.currentMutation) == null ? void 0 : _this$currentMutation.setOptions(this.options);\n  }\n\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      var _this$currentMutation2;\n\n      (_this$currentMutation2 = this.currentMutation) == null ? void 0 : _this$currentMutation2.removeObserver(this);\n    }\n  }\n\n  onMutationUpdate(action) {\n    this.updateResult(); // Determine which callbacks to trigger\n\n    const notifyOptions = {\n      listeners: true\n    };\n\n    if (action.type === 'success') {\n      notifyOptions.onSuccess = true;\n    } else if (action.type === 'error') {\n      notifyOptions.onError = true;\n    }\n\n    this.notify(notifyOptions);\n  }\n\n  getCurrentResult() {\n    return this.currentResult;\n  }\n\n  reset() {\n    this.currentMutation = undefined;\n    this.updateResult();\n    this.notify({\n      listeners: true\n    });\n  }\n\n  mutate(variables, options) {\n    this.mutateOptions = options;\n\n    if (this.currentMutation) {\n      this.currentMutation.removeObserver(this);\n    }\n\n    this.currentMutation = this.client.getMutationCache().build(this.client, { ...this.options,\n      variables: typeof variables !== 'undefined' ? variables : this.options.variables\n    });\n    this.currentMutation.addObserver(this);\n    return this.currentMutation.execute();\n  }\n\n  updateResult() {\n    const state = this.currentMutation ? this.currentMutation.state : getDefaultState();\n    const isLoading = state.status === 'loading';\n    const result = { ...state,\n      isLoading,\n      isPending: isLoading,\n      isSuccess: state.status === 'success',\n      isError: state.status === 'error',\n      isIdle: state.status === 'idle',\n      mutate: this.mutate,\n      reset: this.reset\n    };\n    this.currentResult = result;\n  }\n\n  notify(options) {\n    notifyManager.batch(() => {\n      // First trigger the mutate callbacks\n      if (this.mutateOptions && this.hasListeners()) {\n        if (options.onSuccess) {\n          var _this$mutateOptions$o, _this$mutateOptions, _this$mutateOptions$o2, _this$mutateOptions2;\n\n          (_this$mutateOptions$o = (_this$mutateOptions = this.mutateOptions).onSuccess) == null ? void 0 : _this$mutateOptions$o.call(_this$mutateOptions, this.currentResult.data, this.currentResult.variables, this.currentResult.context);\n          (_this$mutateOptions$o2 = (_this$mutateOptions2 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o2.call(_this$mutateOptions2, this.currentResult.data, null, this.currentResult.variables, this.currentResult.context);\n        } else if (options.onError) {\n          var _this$mutateOptions$o3, _this$mutateOptions3, _this$mutateOptions$o4, _this$mutateOptions4;\n\n          (_this$mutateOptions$o3 = (_this$mutateOptions3 = this.mutateOptions).onError) == null ? void 0 : _this$mutateOptions$o3.call(_this$mutateOptions3, this.currentResult.error, this.currentResult.variables, this.currentResult.context);\n          (_this$mutateOptions$o4 = (_this$mutateOptions4 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o4.call(_this$mutateOptions4, undefined, this.currentResult.error, this.currentResult.variables, this.currentResult.context);\n        }\n      } // Then trigger the listeners\n\n\n      if (options.listeners) {\n        this.listeners.forEach(({\n          listener\n        }) => {\n          listener(this.currentResult);\n        });\n      }\n    });\n  }\n\n}\n\nexport { MutationObserver };\n//# sourceMappingURL=mutationObserver.mjs.map\n","'use client';\nimport * as React from 'react';\nimport { parseMutationArgs, MutationObserver, notifyManager } from '@tanstack/query-core';\nimport { useSyncExternalStore } from './useSyncExternalStore.mjs';\nimport { useQueryClient } from './QueryClientProvider.mjs';\nimport { shouldThrowError } from './utils.mjs';\n\nfunction useMutation(arg1, arg2, arg3) {\n  const options = parseMutationArgs(arg1, arg2, arg3);\n  const queryClient = useQueryClient({\n    context: options.context\n  });\n  const [observer] = React.useState(() => new MutationObserver(queryClient, options));\n  React.useEffect(() => {\n    observer.setOptions(options);\n  }, [observer, options]);\n  const result = useSyncExternalStore(React.useCallback(onStoreChange => observer.subscribe(notifyManager.batchCalls(onStoreChange)), [observer]), () => observer.getCurrentResult(), () => observer.getCurrentResult());\n  const mutate = React.useCallback((variables, mutateOptions) => {\n    observer.mutate(variables, mutateOptions).catch(noop);\n  }, [observer]);\n\n  if (result.error && shouldThrowError(observer.options.useErrorBoundary, [result.error])) {\n    throw result.error;\n  }\n\n  return { ...result,\n    mutate,\n    mutateAsync: result.mutate\n  };\n} // eslint-disable-next-line @typescript-eslint/no-empty-function\n\nfunction noop() {}\n\nexport { useMutation };\n//# sourceMappingURL=useMutation.mjs.map\n","import { HttpClient } from '@sisense/sdk-rest-client';\r\nimport type {\r\n  Chat,\r\n  ChatRequest,\r\n  ChatResponse,\r\n  ChatWithoutHistory,\r\n  ChatContext,\r\n  GetNlgInsightsRequest,\r\n  GetNlgInsightsResponse,\r\n  LlmConfig,\r\n  QueryRecommendationConfig,\r\n  QueryRecommendationResponse,\r\n  SendFeedbackRequest,\r\n  GetNlqResultRequest,\r\n  NlqResult,\r\n} from './types';\r\nimport { ChatContextDetails } from '@/ai/api/types';\r\n\r\n/** @internal */\r\nexport class ChatRestApi {\r\n  private httpClient: HttpClient;\r\n\r\n  constructor(httpClient: HttpClient, private readonly volatile = false) {\r\n    this.httpClient = httpClient;\r\n  }\r\n\r\n  public getChatContexts = async () => {\r\n    //TODO: refactor to use getDataSourceList() from sdk-query-client after applying same change there?\r\n    //INFO: trailing slash after /datasources is needed for REST API otherwise ALL tenants models are returned instead of current tenant\r\n    const result = await this.httpClient.get<ChatContext[]>(`api/datasources//`);\r\n    return result || [];\r\n  };\r\n\r\n  // ==== /v2/ai endpoints ====\r\n  private getNlgInsights = (request: GetNlgInsightsRequest) => {\r\n    return this.httpClient.post<GetNlgInsightsResponse>('api/v2/ai/nlg/queryResult', request);\r\n  };\r\n\r\n  private getQueryRecommendations = (contextTitle: string, config: QueryRecommendationConfig) => {\r\n    return this.httpClient.get<QueryRecommendationResponse>(\r\n      `api/v2/ai/recommendations/query/${contextTitle}/${config.numOfRecommendations}${\r\n        config.userPrompt ? '?userPrompt=' + encodeURIComponent(config.userPrompt) : ''\r\n      }`,\r\n    );\r\n  };\r\n\r\n  private getNlqResult = (contextTitle: string, request: GetNlqResultRequest) => {\r\n    return this.httpClient.post<NlqResult>(`api/v2/ai/nlq/query/${contextTitle}`, request);\r\n  };\r\n\r\n  private setLlmConfig = (config: LlmConfig) => {\r\n    return this.httpClient.post('api/v2/settings/ai/llmProvider', config).catch((e) => {\r\n      console.error('Unable to set llm config', e);\r\n    });\r\n  };\r\n\r\n  // ==== /v2/ai/chats endpoints ====\r\n  private getAllChats = async () => {\r\n    return this.volatile ? [] : this.httpClient.get<ChatWithoutHistory[]>('api/v2/ai/chats');\r\n  };\r\n\r\n  private getChatById = (chatId: string) => {\r\n    return this.httpClient.get<Chat>(`api/v2/ai/chats/${chatId}`);\r\n  };\r\n\r\n  private createChat = (sourceId: string, contextDetails?: ChatContextDetails) => {\r\n    return this.httpClient.post<Chat>('api/v2/ai/chats', {\r\n      sourceId,\r\n      volatile: this.volatile,\r\n      contextDetails,\r\n    });\r\n  };\r\n\r\n  private postChat = (chatId: string, request: ChatRequest) => {\r\n    return this.httpClient.post<ChatResponse>(`api/v2/ai/chats/${chatId}`, request);\r\n  };\r\n\r\n  private deleteChatHistory = (chatId: string) => {\r\n    return this.httpClient.delete(`api/v2/ai/chats/${chatId}/history`);\r\n  };\r\n\r\n  private sendFeedback = (request: SendFeedbackRequest) => {\r\n    return this.httpClient.post('api/v2/ai/feedback', request);\r\n  };\r\n\r\n  ai = {\r\n    getNlgInsights: this.getNlgInsights,\r\n    getNlqResult: this.getNlqResult,\r\n    getQueryRecommendations: this.getQueryRecommendations,\r\n    setLlmConfig: this.setLlmConfig,\r\n    sendFeedback: this.sendFeedback,\r\n    chat: {\r\n      getAll: this.getAllChats,\r\n      getById: this.getChatById,\r\n      create: this.createChat,\r\n      post: this.postChat,\r\n      clearHistory: this.deleteChatHistory,\r\n    },\r\n  };\r\n}\r\n","import { createContext, ReactNode, useContext, useMemo } from 'react';\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\r\n\r\nimport { useSisenseContext } from '../../sisense-context/sisense-context';\r\nimport { ChatRestApi } from './chat-rest-api';\r\n\r\nconst queryClient = new QueryClient({\r\n  defaultOptions: {\r\n    queries: {\r\n      refetchOnWindowFocus: false,\r\n      refetchOnMount: false,\r\n    },\r\n  },\r\n});\r\n\r\n/**\r\n * Exported for testing purposes only.\r\n *\r\n * @internal\r\n */\r\nexport const ChatApiContext = createContext<ChatRestApi | undefined>(undefined);\r\n\r\nexport const useChatApi = () => useContext(ChatApiContext);\r\n\r\n/**\r\n * React component that initializes the necessary wrappers to enable API calls and caching.\r\n *\r\n * @internal\r\n */\r\nexport const ChatApiProvider = ({\r\n  children,\r\n  volatile,\r\n}: {\r\n  children: ReactNode;\r\n  volatile?: boolean;\r\n}) => {\r\n  const { app } = useSisenseContext();\r\n  const api = useMemo(\r\n    () => (app ? new ChatRestApi(app.httpClient, volatile) : undefined),\r\n    [app, volatile],\r\n  );\r\n\r\n  return (\r\n    <ChatApiContext.Provider value={api}>\r\n      <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\r\n    </ChatApiContext.Provider>\r\n  );\r\n};\r\n","import { createContext, ReactNode, useCallback, useContext, useState } from 'react';\r\nimport { ChatContextDetails } from '@/ai/api/types';\r\n\r\nexport interface ChatIdMapProviderProps {\r\n  children: ReactNode;\r\n}\r\n\r\nexport interface ChatIdStorage {\r\n  saveChatId: (chatId: string, contextTitle: string, contextDetails?: ChatContextDetails) => void;\r\n  getChatId: (contextTitle: string, contextDetails?: ChatContextDetails) => string | undefined;\r\n}\r\n\r\nexport const ChatIdStorageContext = createContext<ChatIdStorage>({} as ChatIdStorage);\r\n\r\nexport const useChatIdStorage = () => useContext(ChatIdStorageContext);\r\n\r\nexport const ChatIdStorageProvider = ({ children }: ChatIdMapProviderProps) => {\r\n  const [storage, setStorage] = useState<Record<string, string>>({});\r\n\r\n  const getKey = useCallback(\r\n    (contextTitle: string, contextDetails?: ChatContextDetails) =>\r\n      `${contextTitle}_${contextDetails?.dashboardId ?? ''}`,\r\n    [],\r\n  );\r\n\r\n  const saveChatId = useCallback(\r\n    (chatId: string, contextTitle: string, contextDetails?: ChatContextDetails) => {\r\n      setStorage((prevStorage) => ({\r\n        ...prevStorage,\r\n        [getKey(contextTitle, contextDetails)]: chatId,\r\n      }));\r\n    },\r\n    [getKey],\r\n  );\r\n\r\n  const getChatId = useCallback(\r\n    (contextTitle: string, contextDetails?: ChatContextDetails) =>\r\n      storage[getKey(contextTitle, contextDetails)],\r\n    [storage, getKey],\r\n  );\r\n\r\n  return (\r\n    <ChatIdStorageContext.Provider value={{ saveChatId, getChatId }}>\r\n      {children}\r\n    </ChatIdStorageContext.Provider>\r\n  );\r\n};\r\n","import { ReactNode } from 'react';\n\nimport { ChatApiProvider } from './api/chat-api-provider';\nimport { ChatIdStorageProvider } from '@/ai/chat-id-storage-provider';\n\nexport interface AiContextProviderProps {\n  children: ReactNode;\n  /**\n   * Boolean flag to indicate whether the chat session should be volatile.\n   *\n   * When `false` the chat session history will be stored per user per datamodel. The retention period is configurable in Sisense Fusion.\n   *\n   * When the `Chatbot` component renders, if a previous chat history exists for the current user and datamodel, it will be restored. The user may continue the conversation or clear the history.\n   *\n   * When `true` a new chat session (with no history) will be created each time the `Chatbot` comoponent initializes.\n   *\n   * @default false\n   */\n  volatile?: boolean;\n}\n\n/**\n * React component that wraps all generative AI components and hooks.\n *\n * @example\n * ```tsx\n * import { SisenseContextProvider } from 'sisense-sdk-ui-next';\n * import { AiContextProvider, Chatbot } from '@sisense/sdk-ui/ai';\n *\n * function App() {\n *   return (\n *     <SisenseContextProvider {...sisenseContextProps}>\n *       <AiContextProvider>\n *         <Chatbot />\n *       </AiContextProvider>\n *     </SisenseContextProvider>\n *   );\n * }\n * ```\n * @param props - AI Context Provider Props\n * @returns An AI Context Provider Component\n * @group Generative AI\n */\nexport default function AiContextProvider({ children, volatile }: AiContextProviderProps) {\n  return (\n    <ChatIdStorageProvider>\n      <ChatApiProvider volatile={volatile}>{children}</ChatApiProvider>\n    </ChatIdStorageProvider>\n  );\n}\n","import { useQuery } from '@tanstack/react-query';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport { withTracking } from '@/decorators/hook-decorators';\r\nimport { useChatApi } from './api/chat-api-provider';\r\nimport {\r\n  Attribute,\r\n  convertJaqlDataSource,\r\n  DataSource,\r\n  Filter,\r\n  FilterRelations,\r\n  getFilterListAndRelationsJaql,\r\n  JaqlDataSource,\r\n  Measure,\r\n} from '@sisense/sdk-data';\r\nimport { GetNlgInsightsRequest } from './api/types';\r\nimport { GetNlgInsightsProps } from './get-nlg-insights';\r\nimport { getJaqlQueryPayload } from '@sisense/sdk-query-client';\r\n\r\n/**\r\n * Parameters for {@link useGetNlgInsights} hook.\r\n */\r\nexport interface UseGetNlgInsightsParams {\r\n  /** The data source that the query targets - e.g. `Sample ECommerce` */\r\n  dataSource: DataSource;\r\n\r\n  /** Dimensions of the query */\r\n  dimensions?: Attribute[];\r\n\r\n  /** Measures of the query */\r\n  measures?: Measure[];\r\n\r\n  /** Filters of the query */\r\n  filters?: Filter[] | FilterRelations;\r\n\r\n  /**\r\n   * Boolean flag to enable/disable API call by default\r\n   *\r\n   * If not specified, the default value is `true`\r\n   */\r\n  enabled?: boolean;\r\n\r\n  /** The verbosity of the NLG summarization */\r\n  verbosity?: 'Low' | 'High';\r\n}\r\n\r\n/**\r\n * State for {@link useGetNlgInsights} hook.\r\n */\r\nexport interface UseGetNlgInsightsState {\r\n  /** Whether the data fetching is loading */\r\n  isLoading: boolean;\r\n  /** Whether the data fetching has failed */\r\n  isError: boolean;\r\n  /** Whether the data fetching has succeeded */\r\n  isSuccess: boolean;\r\n  /** The result data */\r\n  data: string | undefined;\r\n  /** The error if any occurred */\r\n  error: unknown;\r\n  /** Callback to trigger a refetch of the data */\r\n  refetch: () => void;\r\n}\r\n\r\n/** @internal */\r\nexport function prepareGetNlgInsightsPayload(\r\n  params: UseGetNlgInsightsParams | GetNlgInsightsRequest,\r\n): GetNlgInsightsRequest {\r\n  if ('jaql' in params) {\r\n    return params;\r\n  } else {\r\n    const dataSource: JaqlDataSource = convertJaqlDataSource(params.dataSource);\r\n\r\n    const { filters = [], relations } = getFilterListAndRelationsJaql(params.filters);\r\n    const { metadata, filterRelations } = getJaqlQueryPayload(\r\n      {\r\n        dataSource: params.dataSource,\r\n        attributes: params.dimensions ?? [],\r\n        measures: params.measures ?? [],\r\n        filters,\r\n        filterRelations: relations,\r\n        highlights: [],\r\n      },\r\n      true,\r\n    );\r\n\r\n    const parameters: GetNlgInsightsRequest = {\r\n      jaql: {\r\n        datasource: dataSource,\r\n        metadata,\r\n        filterRelations,\r\n      },\r\n    };\r\n\r\n    if (params.verbosity) {\r\n      parameters.verbosity = params.verbosity;\r\n    }\r\n\r\n    return parameters;\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n * @param params - {@link UseGetNlgInsightsParams}\r\n * @param enabled - boolean flag to enable/disable this hook\r\n * @internal\r\n */\r\nexport const useGetNlgInsightsInternal = (\r\n  params: GetNlgInsightsProps | GetNlgInsightsRequest,\r\n  enabled = true,\r\n): UseGetNlgInsightsState => {\r\n  const payload: GetNlgInsightsRequest = useMemo(() => {\r\n    return prepareGetNlgInsightsPayload(params);\r\n  }, [params]);\r\n\r\n  const api = useChatApi();\r\n\r\n  const { data, error, isError, isLoading, isSuccess, refetch } = useQuery({\r\n    queryKey: ['getNlgInsights', payload, api],\r\n    queryFn: () => api?.ai.getNlgInsights(payload),\r\n    select: (data) => data?.data?.answer,\r\n    enabled: !!api && enabled,\r\n  });\r\n\r\n  return {\r\n    isLoading,\r\n    isError,\r\n    isSuccess,\r\n    data,\r\n    error,\r\n    refetch: useCallback(() => {\r\n      refetch();\r\n    }, [refetch]),\r\n  };\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nconst useGetNlgInsightsWithoutTracking = (params: UseGetNlgInsightsParams) => {\r\n  const { enabled, ...restParams } = params;\r\n  return useGetNlgInsightsInternal(restParams, enabled);\r\n};\r\n\r\n/**\r\n * React hook that fetches an analysis of the provided query using natural language generation (NLG).\r\n * Specifying a query is similar to providing parameters to a {@link useExecuteQuery} hook, using dimensions, measures, and filters.\r\n *\r\n * @example\r\n * ```tsx\r\n * const { data, isLoading } = useGetNlgInsights({\r\n *   dataSource: 'Sample ECommerce',\r\n *   dimensions: [DM.Commerce.Date.Years],\r\n *   measures: [measureFactory.sum(DM.Commerce.Revenue)],\r\n * });\r\n *\r\n * if (isLoading) {\r\n *   return <div>Loading...</div>;\r\n * }\r\n *\r\n * return <p>{data}</p>;\r\n * ```\r\n * @returns Response object containing a text summary\r\n * @group Generative AI\r\n */\r\nexport const useGetNlgInsights = withTracking('useGetNlgInsights')(\r\n  useGetNlgInsightsWithoutTracking,\r\n);\r\n","import { JaqlQueryPayload } from '@sisense/sdk-query-client';\r\nimport { ExpandedQueryModel } from '@/analytics-composer';\r\nimport { WidgetProps } from '@/props';\r\n\r\nexport interface ChatContext {\r\n  title: string;\r\n  live: boolean;\r\n}\r\n\r\nexport interface ChatContextDetails {\r\n  dashboardId?: string;\r\n}\r\nexport interface TextMessage {\r\n  role: 'assistant';\r\n  content: string; // stringified json { answer: string }\r\n  type: 'text';\r\n}\r\nexport interface NlqMessage {\r\n  role: 'assistant';\r\n  content: string; // stringified json\r\n  type: 'nlq';\r\n}\r\ninterface RegularMessage {\r\n  role: 'user' | 'assistant';\r\n  content: string;\r\n}\r\nexport type ChatMessage = RegularMessage | NlqMessage | TextMessage;\r\n\r\nexport interface Chat {\r\n  chatId: string;\r\n  contextId: string;\r\n  contextTitle: string;\r\n  contextDetails?: ChatContextDetails;\r\n  expireAt: string;\r\n  tenantId: string;\r\n  userId: string;\r\n  chatHistory: ChatMessage[];\r\n}\r\nexport type ChatWithoutHistory = Omit<Chat, 'chatHistory'>;\r\n\r\nexport interface LlmConfig {\r\n  provider: string;\r\n  apiKey: string;\r\n  baseUrl: string;\r\n  model: string;\r\n  version?: string;\r\n}\r\n\r\nexport interface ChatRequest {\r\n  text?: string;\r\n  timezone?: string;\r\n  options?: {\r\n    enableFollowup?: boolean;\r\n  };\r\n}\r\n\r\ninterface TextResponse {\r\n  chatHistory: ChatMessage[];\r\n  data: {\r\n    answer: string;\r\n  };\r\n  chatId: string;\r\n  responseType: 'text';\r\n}\r\n\r\ninterface ErrorResponse {\r\n  data: {\r\n    message: string;\r\n    code: string;\r\n    answer: string;\r\n  };\r\n  responseType: 'error';\r\n}\r\n\r\n/**\r\n * Response data for NLQ request\r\n */\r\nexport interface NlqResponseData extends ExpandedQueryModel {\r\n  /** Detailed description of the response */\r\n  detailedDescription: string;\r\n  /** An array of suggested followup questions  */\r\n  followupQuestions?: string[];\r\n  /** NLQ prompt used in the request  */\r\n  nlqPrompt: string;\r\n  /** Suggested widget props*/\r\n  widgetProps?: WidgetProps | undefined;\r\n  /** The response message for the chat  */\r\n  userMsg: string;\r\n  /** @internal */\r\n  clarification?: string;\r\n}\r\nexport interface NlqResponse {\r\n  data: NlqResponseData;\r\n  timestamp: string;\r\n  responseType: 'nlq';\r\n}\r\nexport type ChatResponse = NlqResponse | TextResponse | ErrorResponse;\r\n\r\nexport interface QueryRecommendationConfig {\r\n  numOfRecommendations: number;\r\n  userPrompt?: string;\r\n}\r\n\r\nexport type NlqResult = Omit<NlqResponseData, 'followupQuestions'>;\r\n\r\n/** AI-generated recommended query you can run on your data model */\r\nexport interface QueryRecommendation extends Omit<NlqResponseData, 'followupQuestions'> {}\r\nexport type QueryRecommendationResponse = QueryRecommendation[];\r\n\r\nexport interface GetNlgInsightsRequest {\r\n  jaql: Pick<JaqlQueryPayload, 'datasource' | 'metadata' | 'filterRelations'>;\r\n  verbosity?: 'Low' | 'High';\r\n}\r\n\r\n/** @internal */\r\nexport interface GetNlgInsightsResponse {\r\n  data?: {\r\n    answer: string;\r\n  };\r\n  responseType: 'Text';\r\n}\r\n\r\n/** @internal */\r\nexport const NLQ_RESULT_CHART_TYPES = [\r\n  'indicator',\r\n  'column',\r\n  'line',\r\n  'table',\r\n  'pie',\r\n  'bar',\r\n] as const;\r\n/** NLQ result chart types @expandType */\r\nexport type NlqResultChartType = (typeof NLQ_RESULT_CHART_TYPES)[number];\r\nexport interface GetNlqResultRequest {\r\n  text: string;\r\n  timezone?: string;\r\n  chartTypes: NlqResultChartType[];\r\n}\r\n\r\nexport interface SendFeedbackRequest {\r\n  type: string;\r\n  data: object;\r\n  sourceId: string;\r\n  rating: -1 | 1;\r\n}\r\n\r\n/**\r\n * The chat mode to use for a chat session\r\n *\r\n * analyze: Enable business users to uncover data insights\r\n * develop: Enable developers to build queries and charts for embedded analytics\r\n */\r\nexport type ChatMode = 'analyze' | 'develop';\r\n","import { withTracking } from '@/decorators/hook-decorators';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { useCallback } from 'react';\r\n\r\nimport { useChatApi } from './api/chat-api-provider';\r\nimport { widgetComposer } from '@/analytics-composer';\r\nimport { WidgetProps } from '@/props';\r\nimport { DataSource } from '@sisense/sdk-data';\r\nimport { HookEnableParam } from '@/common/hooks/types';\r\nimport { GetNlqResultRequest, NLQ_RESULT_CHART_TYPES, NlqResultChartType } from './api/types';\r\n\r\nexport interface GetNlqResultParams {\r\n  /** Data source for queries to run against */\r\n  dataSource: DataSource;\r\n\r\n  /** Text containing the natural language query */\r\n  query: string;\r\n\r\n  /** Possible chart types to be used in NLQ results */\r\n  chartTypes?: NlqResultChartType[];\r\n\r\n  /**\r\n   * Enable suggested axis titles in generated widget\r\n   *\r\n   * If not specified, the default value is `false`\r\n   *\r\n   * @internal\r\n   */\r\n  enableAxisTitlesInWidgetProps?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport function prepareGetNlqResultPayload(params: GetNlqResultParams): {\r\n  contextTitle: string;\r\n  request: GetNlqResultRequest;\r\n} {\r\n  const { dataSource, query, chartTypes } = params;\r\n  const dataSourceTitle = typeof dataSource === 'string' ? dataSource : dataSource.title;\r\n\r\n  return {\r\n    contextTitle: dataSourceTitle,\r\n    request: {\r\n      text: query,\r\n      // Timezone is not used by AI API, but it is currently required by the endpoint\r\n      timezone: 'UTC',\r\n      chartTypes: chartTypes ?? [...NLQ_RESULT_CHART_TYPES],\r\n    },\r\n  };\r\n}\r\n\r\n/**\r\n * Parameters for {@link useGetNlqResult} hook.\r\n */\r\nexport interface UseGetNlqResultParams extends GetNlqResultParams, HookEnableParam {}\r\n\r\n/**\r\n * State for {@link useGetNlqResult} hook.\r\n */\r\nexport interface UseGetNlqResultState {\r\n  /** Whether the data fetching is loading */\r\n  isLoading: boolean;\r\n  /** Whether the data fetching has failed */\r\n  isError: boolean;\r\n  /** Whether the data fetching has succeeded */\r\n  isSuccess: boolean;\r\n  /** The result data */\r\n  data: WidgetProps | undefined;\r\n  /** The error if any occurred */\r\n  error: unknown;\r\n  /** Callback to trigger a refetch of the data */\r\n  refetch: () => void;\r\n}\r\n\r\n/**\r\n * @param params - {@link UseGetNlqResultParams}\r\n * @internal\r\n */\r\nexport const useGetNlqResultInternal = (params: UseGetNlqResultParams): UseGetNlqResultState => {\r\n  const { contextTitle, request } = prepareGetNlqResultPayload(params);\r\n  const api = useChatApi();\r\n\r\n  const { isLoading, isError, isSuccess, data, error, refetch } = useQuery({\r\n    queryKey: ['getNlqResult', contextTitle, request, api],\r\n    queryFn: () => api?.ai.getNlqResult(contextTitle, request),\r\n    enabled: !!api && params.enabled,\r\n  });\r\n\r\n  const widgetProps = data\r\n    ? widgetComposer.toWidgetProps(data, {\r\n        useCustomizedStyleOptions: params.enableAxisTitlesInWidgetProps || false,\r\n      })\r\n    : undefined;\r\n\r\n  return {\r\n    isLoading,\r\n    isError,\r\n    isSuccess,\r\n    data: widgetProps,\r\n    error,\r\n    refetch: useCallback(() => {\r\n      refetch();\r\n    }, [refetch]),\r\n  };\r\n};\r\n\r\n/**\r\n * React hook that enables natural language query (NLQ) against a data model or perspective.\r\n *\r\n * @example\r\n * ```tsx\r\n * const { data, isLoading } = useGetNlqResult({\r\n *    dataSource: 'Sample ECommerce',\r\n *    query: 'Show me total revenue by age range'\r\n * });\r\n *\r\n * if (isLoading) {\r\n *   return <div>Loading...</div>;\r\n * }\r\n *\r\n * return (\r\n *   {\r\n *      data &&\r\n *      <Widget {...data} />\r\n *   }\r\n * );\r\n * ```\r\n * @returns NLQ load state that contains the status of the execution, the result (data) as WidgetProps\r\n * @group Generative AI\r\n * @beta\r\n */\r\nexport const useGetNlqResult = withTracking('useGetNlqResult')(useGetNlqResultInternal);\r\n","import { withTracking } from '@/decorators/hook-decorators';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { useCallback, useMemo } from 'react';\r\n\r\nimport { useChatApi } from './api/chat-api-provider';\r\nimport { QueryRecommendation } from './api/types';\r\nimport { widgetComposer } from '@/analytics-composer';\r\nimport { HookEnableParam } from '@/common/hooks/types';\r\n\r\n/** @internal */\r\nexport const DEFAULT_RECOMMENDATIONS_COUNT = 4;\r\n\r\nexport interface GetQueryRecommendationsParams {\r\n  /** Data model title or perspective title */\r\n  contextTitle: string;\r\n\r\n  /**\r\n   * Number of recommendations that should be returned\r\n   *\r\n   * If not specified, the default value is `4`\r\n   */\r\n  count?: number;\r\n\r\n  /**\r\n   * Enable suggested axis titles in generated widget\r\n   *\r\n   * If not specified, the default value is `false`\r\n   *\r\n   * @internal\r\n   */\r\n  enableAxisTitlesInWidgetProps?: boolean;\r\n\r\n  /**\r\n   * Pass a custom prompt to AI when generating query recommendations\r\n   *\r\n   * e.g. \"Focus on age range\"\r\n   *\r\n   */\r\n  customPrompt?: string;\r\n}\r\n\r\n/**\r\n * Parameters for {@link useGetQueryRecommendations} hook.\r\n */\r\nexport interface UseGetQueryRecommendationsParams\r\n  extends GetQueryRecommendationsParams,\r\n    HookEnableParam {}\r\n\r\n/**\r\n * State for {@link useGetQueryRecommendations} hook.\r\n */\r\nexport interface UseGetQueryRecommendationsState {\r\n  /** Whether the data fetching is loading */\r\n  isLoading: boolean;\r\n  /** Whether the data fetching has failed */\r\n  isError: boolean;\r\n  /** Whether the data fetching has succeeded */\r\n  isSuccess: boolean;\r\n  /** The result data */\r\n  data: QueryRecommendation[] | undefined;\r\n  /** The error if any occurred */\r\n  error: unknown;\r\n  /** Callback to trigger a refetch of the data */\r\n  refetch: () => void;\r\n}\r\n\r\n/**\r\n * @param params - {@link UseGetQueryRecommendationsParams}\r\n * @internal\r\n */\r\nexport const useGetQueryRecommendationsInternal = (\r\n  params: UseGetQueryRecommendationsParams,\r\n): UseGetQueryRecommendationsState => {\r\n  const { contextTitle, count, enableAxisTitlesInWidgetProps, enabled, customPrompt } = params;\r\n\r\n  const api = useChatApi();\r\n\r\n  const recCount = count ?? DEFAULT_RECOMMENDATIONS_COUNT;\r\n\r\n  const shouldGetRecommendations = (enabled === undefined || enabled === true) && recCount > 0;\r\n\r\n  const {\r\n    isLoading,\r\n    isError,\r\n    isSuccess,\r\n    data: rawRecommendations,\r\n    error,\r\n    refetch,\r\n  } = useQuery({\r\n    queryKey: ['getQueryRecommendations', contextTitle, recCount, api],\r\n    queryFn: () =>\r\n      api?.ai.getQueryRecommendations(contextTitle, {\r\n        numOfRecommendations: recCount,\r\n        ...(customPrompt ? { userPrompt: customPrompt } : null),\r\n      }),\r\n    enabled: !!api && shouldGetRecommendations,\r\n  });\r\n\r\n  const recommendations = useMemo(() => {\r\n    return rawRecommendations?.map((recommendation: QueryRecommendation) => ({\r\n      ...recommendation,\r\n      widgetProps: recommendation.jaql\r\n        ? widgetComposer.toWidgetProps(recommendation, {\r\n            useCustomizedStyleOptions: enableAxisTitlesInWidgetProps,\r\n          })\r\n        : undefined,\r\n    }));\r\n  }, [rawRecommendations, enableAxisTitlesInWidgetProps]);\r\n\r\n  return {\r\n    isLoading: shouldGetRecommendations ? isLoading : false,\r\n    isError: isError,\r\n    isSuccess: isSuccess,\r\n    data: recommendations ?? undefined,\r\n    error: error,\r\n    refetch: useCallback(() => {\r\n      refetch();\r\n    }, [refetch]),\r\n  };\r\n};\r\n\r\n/**\r\n * React hook that fetches recommended questions for a data model or perspective.\r\n *\r\n * This hook includes the same code that fetches the initial suggested questions in the chatbot.\r\n *\r\n * @example\r\n * ```tsx\r\n * const { data, isLoading } = useGetQueryRecommendations({\r\n *   contextTitle: 'Sample ECommerce',\r\n * });\r\n *\r\n * if (isLoading) {\r\n *   return <div>Loading recommendations</div>;\r\n * }\r\n *\r\n * return (\r\n *   <ul>\r\n *     {data.map((item, index) => (\r\n *       <li key={index}>{item.nlqPrompt}</li>\r\n *     ))}\r\n *   </ul>\r\n * );\r\n * ```\r\n * @returns An array of objects, each containing recommended question text and its corresponding `widgetProps`\r\n * @group Generative AI\r\n * @beta\r\n */\r\nexport const useGetQueryRecommendations = withTracking('useGetQueryRecommendations')(\r\n  useGetQueryRecommendationsInternal,\r\n);\r\n","import { createContext, ReactNode, useContext } from 'react';\r\n\r\nimport { ChatMode, ChatContextDetails } from '@/ai/api/types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport interface ChatConfig {\r\n  /**\r\n   * Boolean flag to show or hide suggested questions following a chat response. Currently\r\n   * follow-up questions are still under development and are not validated. Therefore, follow-up\r\n   * questions are disabled by default.\r\n   */\r\n  enableFollowupQuestions: boolean;\r\n\r\n  /**\r\n   * Number of recommended queries that should initially be shown in a chat session\r\n   *\r\n   * If not specified, the default value is `4`.\r\n   *\r\n   * Set to `0` to disable initial recommendations.\r\n   */\r\n  numOfRecommendations: number;\r\n\r\n  /**\r\n   * Pass a custom prompt to AI when generating query recommendations\r\n   *\r\n   * e.g. \"Focus on age range\"\r\n   *\r\n   */\r\n  customPrompt?: string;\r\n\r\n  /**\r\n   * Number of recent prompts that should be shown in a chat session\r\n   *\r\n   * If not specified, the default value is `5`\r\n   */\r\n  numOfRecentPrompts: number;\r\n\r\n  /**\r\n   * List of titles representing allowed contexts (data models or perspectives) for a chat session.\r\n   *\r\n   * Each context will be validated and checked for availability.\r\n   * If only one context is specified, the data topic selector screen will not be shown.\r\n   */\r\n  dataTopicsList?: string[];\r\n\r\n  /**\r\n   * The chat mode to use for a chat session.\r\n   *\r\n   * @internal\r\n   */\r\n  chatMode?: ChatMode;\r\n\r\n  /** The input prompt text to show in the chat input box */\r\n  inputPromptText?: string;\r\n\r\n  /**\r\n   * The welcome text to show at the top of a chat session.\r\n   *\r\n   * A value of `false` will hide the welcome text.\r\n   *\r\n   * If not specified, a default message will be displayed.\r\n   */\r\n  welcomeText?: string | false;\r\n\r\n  /**\r\n   * The message text to show above the initial suggested questions in a chat session.\r\n   *\r\n   * A value of `false` will hide the text.\r\n   *\r\n   * If not specified, a default message will be displayed.\r\n   */\r\n  suggestionsWelcomeText?: string | false;\r\n\r\n  /**\r\n   * Boolean flag to show or hide the header in a chat session.\r\n   *\r\n   * @default true\r\n   * @internal\r\n   */\r\n  enableHeader?: boolean;\r\n\r\n  /**\r\n   * Boolean flag to show or hide the insights button in a chat session.\r\n   *\r\n   * @default true\r\n   * @internal\r\n   */\r\n  enableInsights?: boolean;\r\n\r\n  /**\r\n   * Boolean flag to hide chat history on every load.\r\n   *\r\n   * Note: When the flag is `true`, chat history will be preserved and stored for the session but will not be displayed. Changing this setting back to `false` will make the entire history visible again, even if it was previously hidden. Use the \"Clear History\" button to completely erase the history.\r\n   *\r\n   * @default false\r\n   * @deprecated\r\n   * This flag is deprecated and will be removed in a future version. Use {@link @sisense/sdk-ui!AiContextProviderProps.volatile} instead.\r\n   */\r\n  hideHistory?: boolean;\r\n\r\n  /**\r\n   * Optional chat context details.\r\n   *\r\n   * @internal\r\n   */\r\n  contextDetails?: ChatContextDetails;\r\n}\r\n\r\nexport const DEFAULTS = Object.freeze<ChatConfig>({\r\n  enableFollowupQuestions: false,\r\n  enableHeader: true,\r\n  enableInsights: true,\r\n  numOfRecommendations: 4,\r\n  numOfRecentPrompts: 5,\r\n});\r\n\r\nconst ChatConfigContext = createContext<ChatConfig>({\r\n  ...DEFAULTS,\r\n});\r\n\r\nexport type ChatConfigProviderProps = {\r\n  children: ReactNode;\r\n  value: Partial<ChatConfig>;\r\n};\r\n\r\nexport const useChatConfig = () => useContext(ChatConfigContext);\r\n\r\nexport const ChatConfigProvider = ({ children, value }: ChatConfigProviderProps) => {\r\n  const { t } = useTranslation();\r\n  const config = Object.entries(value).reduce<ChatConfig>(\r\n    (acc, [key, val]) => {\r\n      if (val !== undefined) {\r\n        acc[key] = val;\r\n      }\r\n\r\n      return acc;\r\n    },\r\n    {\r\n      ...DEFAULTS,\r\n      inputPromptText: t('ai.config.inputPromptText'),\r\n      welcomeText: t('ai.config.welcomeText'),\r\n      suggestionsWelcomeText: t('ai.config.suggestionsWelcomeText'),\r\n    },\r\n  );\r\n\r\n  return <ChatConfigContext.Provider value={config}>{children}</ChatConfigContext.Provider>;\r\n};\r\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { useEffect } from 'react';\r\n\r\nimport { useChatApi } from './chat-api-provider';\r\nimport type { ChatMessage } from './types';\r\nimport { useChatConfig } from '../chat-config';\r\n\r\nexport const CHAT_HISTORY_QUERY_KEY = 'chatHistory';\r\n\r\nconst useFetchChatHistory = (id: string | undefined) => {\r\n  const api = useChatApi();\r\n  const { hideHistory } = useChatConfig();\r\n\r\n  return useQuery({\r\n    queryKey: [CHAT_HISTORY_QUERY_KEY, id, api],\r\n    queryFn: async () => {\r\n      if (!api || !id) {\r\n        return;\r\n      }\r\n      if (hideHistory) {\r\n        return [];\r\n      }\r\n      const chatObj = await api.ai.chat.getById(id);\r\n      return chatObj?.chatHistory;\r\n    },\r\n    enabled: !!api && !!id,\r\n  });\r\n};\r\n\r\n/**\r\n * Hook that calls the clear history API and updates the cache.\r\n *\r\n * @internal\r\n */\r\nexport const useClearChatHistory = (chatId: string | undefined) => {\r\n  const api = useChatApi();\r\n  const queryClient = useQueryClient();\r\n\r\n  return useMutation({\r\n    mutationFn: async () => {\r\n      if (!api || !chatId) {\r\n        return;\r\n      }\r\n\r\n      return api.ai.chat.clearHistory(chatId);\r\n    },\r\n    onError: (error) => {\r\n      console.error('Error when clearing history:', error);\r\n    },\r\n    onSettled: () => {\r\n      if (!chatId) {\r\n        return;\r\n      }\r\n\r\n      queryClient.setQueriesData<ChatMessage[]>([CHAT_HISTORY_QUERY_KEY, chatId], []);\r\n    },\r\n  });\r\n};\r\n\r\n/**\r\n * Hook that calls the get chat API and handles errors by clearing the history.\r\n *\r\n * @internal\r\n */\r\nexport const useChatHistory = (chatId: string | undefined) => {\r\n  const { data: history, isLoading, isError } = useFetchChatHistory(chatId);\r\n  const { mutate: clearHistory } = useClearChatHistory(chatId);\r\n\r\n  useEffect(() => {\r\n    if (isError) {\r\n      clearHistory();\r\n    }\r\n  }, [isError, clearHistory]);\r\n\r\n  return {\r\n    history,\r\n    isLoading,\r\n    isError,\r\n  };\r\n};\r\n","import { useCallback, useEffect } from 'react';\r\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\n\r\nimport type { ChatMessage, ChatResponse, ChatContextDetails } from './types';\r\nimport { useChatApi } from './chat-api-provider';\r\nimport { CHAT_HISTORY_QUERY_KEY } from './chat-history';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TranslatableError } from '@/translation/translatable-error';\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const useGetDataTopics = () => {\r\n  const api = useChatApi();\r\n\r\n  const { data, isLoading, fetchStatus } = useQuery({\r\n    queryKey: ['getDataTopics', api],\r\n    queryFn: async () => {\r\n      if (!api) {\r\n        return;\r\n      }\r\n\r\n      return api.getChatContexts();\r\n    },\r\n    enabled: !!api,\r\n  });\r\n\r\n  return { data, isLoading, fetchStatus };\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const useGetAllChats = () => {\r\n  const api = useChatApi();\r\n\r\n  const { data, isLoading } = useQuery({\r\n    queryKey: ['getAllChats', api],\r\n    queryFn: () => api?.ai.chat.getAll(),\r\n    enabled: !!api,\r\n  });\r\n\r\n  return {\r\n    data: data ?? [],\r\n    isLoading,\r\n  };\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const useMaybeCreateChat = (\r\n  contextId: string | undefined,\r\n  shouldCreate: boolean,\r\n  contextDetails?: ChatContextDetails,\r\n) => {\r\n  const queryClient = useQueryClient();\r\n  const api = useChatApi();\r\n\r\n  const mutation = useMutation({\r\n    mutationFn: async () => {\r\n      if (!api || !contextId) {\r\n        return;\r\n      }\r\n\r\n      return api.ai.chat.create(contextId, contextDetails);\r\n    },\r\n    onSuccess: () => queryClient.invalidateQueries(['getAllChats']),\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (shouldCreate && mutation.isIdle) {\r\n      mutation.mutate();\r\n    }\r\n  }, [shouldCreate, mutation]);\r\n\r\n  return mutation;\r\n};\r\n\r\nconst mapToChatMessage = (response: ChatResponse, errorMessage: string): ChatMessage => {\r\n  // TODO: Remove this in the next release.\r\n  response.responseType = response.responseType.toLowerCase() as ChatResponse['responseType'];\r\n\r\n  switch (response.responseType) {\r\n    case 'nlq':\r\n      return {\r\n        content: JSON.stringify(response.data),\r\n        role: 'assistant',\r\n        type: 'nlq',\r\n      };\r\n    case 'text':\r\n    case 'error':\r\n      return {\r\n        content: response.data.answer,\r\n        role: 'assistant',\r\n      };\r\n    default:\r\n      throw Error(`${errorMessage}${JSON.stringify(response)}`);\r\n  }\r\n};\r\n\r\n// eslint-disable-next-line max-lines-per-function\r\nexport const useSendChatMessage = (\r\n  chatId: string | undefined,\r\n  enableFollowupQuestions?: boolean,\r\n) => {\r\n  const queryClient = useQueryClient();\r\n  const appendToHistory = useCallback(\r\n    (messageObj: ChatMessage) => {\r\n      if (!chatId) {\r\n        return;\r\n      }\r\n      queryClient.setQueriesData<ChatMessage[]>([CHAT_HISTORY_QUERY_KEY, chatId], (old) => {\r\n        return old ? [...old, messageObj] : old;\r\n      });\r\n    },\r\n    [queryClient, chatId],\r\n  );\r\n\r\n  const { t } = useTranslation();\r\n  const api = useChatApi();\r\n  const { mutate, isLoading } = useMutation({\r\n    mutationFn: async (message: string) => {\r\n      if (!api || !chatId) {\r\n        return;\r\n      }\r\n\r\n      return api.ai.chat.post(chatId, {\r\n        text: message,\r\n        options: { enableFollowup: enableFollowupQuestions },\r\n      });\r\n    },\r\n    onMutate: (message) => {\r\n      appendToHistory({\r\n        content: message,\r\n        role: 'user',\r\n      });\r\n    },\r\n    onError: (error: TranslatableError) => {\r\n      if (error instanceof Error) {\r\n        console.error('Error when sending message:', error.message);\r\n        appendToHistory({\r\n          content: t(`ai.errors.${error.interpolationOptions.errorCode}`, {\r\n            defaultValue: t('ai.errors.unexpectedChatResponse'),\r\n          }),\r\n          role: 'assistant',\r\n        });\r\n      }\r\n    },\r\n    onSuccess: (response) => {\r\n      if (!response) {\r\n        return;\r\n      }\r\n\r\n      const errorMessage = t('ai.errors.unknownResponse');\r\n      appendToHistory(mapToChatMessage(response, errorMessage));\r\n    },\r\n  });\r\n\r\n  return { mutate, isLoading };\r\n};\r\n","import { useGetAllChats, useMaybeCreateChat } from '@/ai/api/hooks';\r\nimport { useChatIdStorage } from '@/ai/chat-id-storage-provider';\r\nimport { useEffect } from 'react';\r\nimport { ChatContextDetails } from '@/ai/api/types';\r\n\r\nexport const useGetChat = (\r\n  contextTitle: string,\r\n  contextDetails?: ChatContextDetails,\r\n  createIfNotExist = false,\r\n) => {\r\n  const { data: chats, isLoading } = useGetAllChats();\r\n\r\n  const chatIdStorage = useChatIdStorage();\r\n\r\n  const chatId =\r\n    chatIdStorage.getChatId(contextTitle, contextDetails) ||\r\n    chats.find(\r\n      (c) =>\r\n        c.contextTitle === contextTitle &&\r\n        c.contextDetails?.dashboardId === contextDetails?.dashboardId,\r\n    )?.chatId;\r\n\r\n  const { isError, data, isSuccess } = useMaybeCreateChat(\r\n    contextTitle,\r\n    createIfNotExist && !isLoading && !chatId,\r\n    contextDetails,\r\n  );\r\n\r\n  useEffect(() => {\r\n    if (isSuccess && data && !chatId) {\r\n      chatIdStorage.saveChatId(data.chatId, contextTitle, contextDetails);\r\n    }\r\n  }, [data, isSuccess, contextTitle, contextDetails, chatId, chatIdStorage]);\r\n\r\n  return { chatId, isLoading, isError };\r\n};\r\n","import { useMemo } from 'react';\r\nimport type { NlqResponseData, ChatMessage } from './api/types';\r\nimport { isNlqMessage } from './use-chat-session';\r\n\r\n/**\r\n * React hook that returns the last NLQ response from chat history\r\n *\r\n * @chatHistory [ChatMessage[]] - Parameters for the hook\r\n * @internal\r\n */\r\nexport const useLastNlqResponseFromHistory = (chatHistory?: ChatMessage[]) => {\r\n  return useMemo(() => {\r\n    if (chatHistory?.length) {\r\n      const lastNlqMessage = chatHistory[chatHistory.length - 1];\r\n      if (isNlqMessage(lastNlqMessage)) {\r\n        return JSON.parse(lastNlqMessage.content) as NlqResponseData;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }, [chatHistory]);\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport { useSendChatMessage } from './api/hooks';\r\nimport {\r\n  ChatMessage,\r\n  NlqMessage,\r\n  NlqResponseData,\r\n  TextMessage,\r\n  ChatContextDetails,\r\n} from './api/types';\r\nimport { useChatHistory } from './api/chat-history';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { TranslatableError } from '@/translation/translatable-error';\r\nimport { useChatConfig } from './chat-config';\r\nimport { useGetChat } from '@/ai/use-get-chat';\r\nimport { useLastNlqResponseFromHistory } from '@/ai/use-last-nlq-response-from-history';\r\n\r\n/**\r\n * Result of the useChatSession hook.\r\n *\r\n * @internal\r\n */\r\nexport interface UseChatSessionResult {\r\n  chatId: string | undefined;\r\n  history: ChatMessage[];\r\n  lastNlqResponse: NlqResponseData | null;\r\n  sendMessage: (message: string) => void;\r\n  isAwaitingResponse: boolean;\r\n  isLoading: boolean;\r\n  lastError: Error | null;\r\n}\r\n\r\nexport const isNlqMessage = (message: ChatMessage | null | undefined): message is NlqMessage =>\r\n  !!message && 'type' in message && message.type === 'nlq';\r\n\r\nexport const isTextMessage = (message: ChatMessage | null | undefined): message is TextMessage =>\r\n  !!message && 'type' in message && message.type === 'text';\r\n\r\n/**\r\n * React hook that returns a chat session object for the given data model or\r\n * perspective.\r\n *\r\n * Maintains chat history and updates when a message is sent/received or when\r\n * history is cleared.\r\n *\r\n * If a chat session does not already exist, then one is created.\r\n *\r\n * @param {string} contextTitle - the title of the data model or perspective\r\n * @param {ChatContextDetails} [contextDetails] - optional chat context details\r\n * @internal\r\n */\r\nexport const useChatSession = (\r\n  contextTitle: string,\r\n  contextDetails?: ChatContextDetails,\r\n): UseChatSessionResult => {\r\n  const { t } = useTranslation();\r\n  const { enableFollowupQuestions } = useChatConfig();\r\n\r\n  const { chatId, isError: isCreateChatError } = useGetChat(contextTitle, contextDetails, true);\r\n\r\n  const [lastError, setLastError] = useState<Error | null>(null);\r\n\r\n  const { history: chatHistory, isLoading, isError: isFetchHistoryError } = useChatHistory(chatId);\r\n\r\n  useEffect(() => {\r\n    if (isCreateChatError) {\r\n      setLastError(new TranslatableError('ai.errors.chatUnavailable'));\r\n    } else if (isFetchHistoryError) {\r\n      setLastError(new TranslatableError('ai.errors.fetchHistory'));\r\n    }\r\n  }, [isCreateChatError, isFetchHistoryError, t]);\r\n\r\n  const { mutate: sendMessage, isLoading: isSendMessageLoading } = useSendChatMessage(\r\n    chatId,\r\n    enableFollowupQuestions,\r\n  );\r\n\r\n  const lastNlqResponse = useLastNlqResponseFromHistory(chatHistory);\r\n\r\n  return {\r\n    chatId,\r\n    history: chatHistory ?? [],\r\n    lastNlqResponse,\r\n    sendMessage,\r\n    isAwaitingResponse: isSendMessageLoading,\r\n    isLoading,\r\n    lastError,\r\n  };\r\n};\r\n","import type { NlqResponseData, ChatContextDetails } from './api/types';\r\nimport { useChatHistory } from './api/chat-history';\r\nimport { useGetChat } from '@/ai/use-get-chat';\r\nimport { useLastNlqResponseFromHistory } from '@/ai/use-last-nlq-response-from-history';\r\n\r\n/**\r\n * Parameters for the useLastNlqResponse hook.\r\n *\r\n * @internal\r\n */\r\nexport interface UseLastNlqResponseParams {\r\n  /** The title of the data model or perspective */\r\n  contextTitle: string;\r\n\r\n  /** optional chat context details */\r\n  contextDetails?: ChatContextDetails;\r\n}\r\n\r\n/**\r\n * React hook that returns the last NLQ response for the chat that corresponds\r\n * to the given data model or perspective.\r\n *\r\n * @param params - Parameters for the hook\r\n * @internal\r\n */\r\nexport const useLastNlqResponse = ({\r\n  contextTitle,\r\n  contextDetails,\r\n}: UseLastNlqResponseParams): NlqResponseData | null => {\r\n  const { chatId } = useGetChat(contextTitle, contextDetails);\r\n\r\n  const { history: chatHistory } = useChatHistory(chatId);\r\n\r\n  return useLastNlqResponseFromHistory(chatHistory);\r\n};\r\n","import type { NlqResponseData, ChatContextDetails } from './api/types';\r\nimport { useChatHistory } from './api/chat-history';\r\nimport { useGetChat } from '@/ai/use-get-chat';\r\nimport { useMemo } from 'react';\r\nimport { isNlqMessage } from '@/ai/use-chat-session';\r\n\r\n/**\r\n * Parameters for the useFinalNlqResponse hook.\r\n *\r\n * @internal\r\n */\r\nexport interface UseFinalNlqResponseParams {\r\n  /** The title of the data model or perspective */\r\n  contextTitle: string;\r\n\r\n  /** optional chat context details */\r\n  contextDetails?: ChatContextDetails;\r\n}\r\n\r\n/**\r\n * React hook that returns the final NLQ response for the chat that corresponds\r\n * to the given data model or perspective.\r\n *\r\n * @param params - Parameters for the hook\r\n * @internal\r\n */\r\nexport const useFinalNlqResponse = ({\r\n  contextTitle,\r\n  contextDetails,\r\n}: UseFinalNlqResponseParams): NlqResponseData | null => {\r\n  const { chatId } = useGetChat(contextTitle, contextDetails);\r\n\r\n  const { history: chatHistory } = useChatHistory(chatId);\r\n\r\n  return useMemo(() => {\r\n    if (chatHistory?.length) {\r\n      const lastNlqMessage = chatHistory.slice().reverse().find(isNlqMessage);\r\n      if (lastNlqMessage) {\r\n        return JSON.parse(lastNlqMessage.content) as NlqResponseData;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }, [chatHistory]);\r\n};\r\n","import { Themable } from '@/theme-provider/types';\r\nimport { css } from '@emotion/react';\r\nimport styled from '@emotion/styled';\r\nimport { CSSProperties } from 'react';\r\n\r\nconst MIN_ALLOWED_WIDTH = 500;\r\nconst MIN_ALLOWED_HEIGHT = 500;\r\n\r\nconst DEFAULT_WIDTH = 500;\r\nconst DEFAULT_HEIGHT = 900;\r\n\r\ntype Sizable = {\r\n  width?: CSSProperties['width'];\r\n  height?: CSSProperties['height'];\r\n};\r\n\r\nexport const ChatFrame = styled.div<Themable & Sizable>`\r\n  box-sizing: border-box;\r\n  position: relative;\r\n  display: flex;\r\n  flex-direction: column;\r\n  border: 1px solid #c6c9ce;\r\n  border-radius: ${({ theme }) => theme.aiChat.borderRadius};\r\n  background-color: ${({ theme }) => theme.aiChat.backgroundColor};\r\n  overflow: hidden;\r\n\r\n  min-width: ${MIN_ALLOWED_WIDTH}px;\r\n  min-height: ${MIN_ALLOWED_HEIGHT}px;\r\n  width: ${({ width }) => (width ? getCssProp(width) : `${DEFAULT_WIDTH}px`)};\r\n  height: ${({ height }) => (height ? getCssProp(height) : `${DEFAULT_HEIGHT}px`)};\r\n\r\n  ${({ theme }) => css`\r\n    font-size: ${theme.aiChat.primaryFontSize[0]};\r\n    line-height: ${theme.aiChat.primaryFontSize[1]};\r\n  `}\r\n  border: ${({ theme }) => (theme.aiChat.border === false ? 'none' : theme.aiChat.border)};\r\n`;\r\n\r\nfunction getCssProp(widthOrHeight: number | string) {\r\n  return typeof widthOrHeight === 'number' ? `${widthOrHeight}px` : widthOrHeight;\r\n}\r\n","type LoadingIconProps = {\r\n  spin?: boolean;\r\n};\r\n\r\nexport default function LoadingIcon({ spin }: LoadingIconProps) {\r\n  return (\r\n    <svg\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n      width=\"24\"\r\n      height=\"24\"\r\n      viewBox=\"0 0 24 24\"\r\n      fill=\"none\"\r\n      className={`${spin ? 'csdk-animate-spin' : ''}`}\r\n    >\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z\"\r\n        fill=\"#262E3D\"\r\n        fillOpacity=\"0.3\"\r\n      />\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M20 12C20 16.4183 16.4183 20 12 20C11.2844 20 10.5908 19.906 9.93078 19.7298C9.96227 19.5889 9.97888 19.4423 9.97888 19.2918C9.97888 18.1873 9.08345 17.2918 7.97888 17.2918C6.87431 17.2918 5.97888 18.1873 5.97888 19.2918C5.97888 20.3964 6.87431 21.2918 7.97888 21.2918C8.56576 21.2918 9.0936 21.0391 9.45946 20.6364C10.2652 20.8731 11.1178 21 12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3V4C16.4183 4 20 7.58172 20 12Z\"\r\n        fill=\"#22C3C3\"\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import LoadingIcon from '@/common/icons/loading-icon';\r\n\r\n/**\r\n * Centered, animated spinner.\r\n */\r\nexport default function LoadingSpinner() {\r\n  return (\r\n    <div className=\"csdk-m-auto\" aria-label=\"loading spinner\">\r\n      <LoadingIcon spin />\r\n    </div>\r\n  );\r\n}\r\n","import { Themable } from '@/theme-provider/types';\r\n\r\nexport default function MessageIcon({ theme }: Themable) {\r\n  return (\r\n    <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n      <path\r\n        d=\"M4 14L0 10L24 0L14 24L10 20L8.47667 16.9533L19 6.4L20 4.00001L17.6099 5L7.04354 15.5218L4 14Z\"\r\n        fill={theme.aiChat.icons.color}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import { Themable } from '@/theme-provider/types';\r\n\r\nexport default function ClearChatIcon({ theme }: Themable) {\r\n  const iconColor = theme.aiChat.icons.color;\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\">\r\n      <path\r\n        d=\"M21.4095 11.1195L12.5644 6.0459C12.3247 5.90841 12.0189 5.99143 11.8816 6.23128L10.764 8.18434C10.6275 8.42284 10.709 8.72678 10.9466 8.86491L19.7108 13.9614C19.9464 14.0984 20.2483 14.0215 20.3897 13.7884L21.5883 11.8125C21.734 11.5723 21.6532 11.2592 21.4095 11.1195Z\"\r\n        fill={iconColor}\r\n      />\r\n      <path\r\n        d=\"M18.7329 8.60735L16.1048 7.07819L19.6668 0.928042C19.8041 0.6909 20.1068 0.608502 20.3454 0.743288L22.156 1.7661C22.3992 1.90347 22.4827 2.21344 22.3414 2.45438L18.7329 8.60735Z\"\r\n        fill={iconColor}\r\n      />\r\n      <path\r\n        d=\"M19.8544 14.9048L10.3563 9.43067C10.2184 9.35116 10.0413 9.39515 9.95275 9.52746C7.03423 13.8862 4.07448 15.2337 3.18167 16.0938C3.09276 16.1794 3.08414 16.3141 3.1538 16.416C3.74961 17.2879 5.10497 18.4425 6.05628 19.2048C6.17328 19.2985 6.34145 19.2903 6.44961 19.1865L9.97994 15.7973L7.69329 20.1066C7.61954 20.2456 7.66674 20.4186 7.80041 20.5017C11.6152 22.8708 14.2978 24.0437 16.9604 24.4472C17.1542 24.4766 17.3191 24.3106 17.3033 24.1152C17.007 20.469 19.0807 16.6112 19.8544 14.9048Z\"\r\n        fill={iconColor}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import { useState } from 'react';\r\nimport styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useThemeContext } from '@/theme-provider/theme-context';\r\n\r\nconst Section = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  row-gap: 4px;\r\n`;\r\n\r\nconst SectionHeader = styled.div<Themable>`\r\n  font-size: 11px;\r\n  line-height: 18px;\r\n  font-weight: 300;\r\n  color: ${({ theme }) => theme.aiChat.dropup.headers.textColor};\r\n  cursor: pointer;\r\n  padding: 4px 12px;\r\n  &:hover {\r\n    background-color: ${({ theme }) => theme.aiChat.dropup.headers.hover.backgroundColor};\r\n  }\r\n`;\r\n\r\nconst DropupItem = styled.div<Themable>`\r\n  font-size: ${({ theme }) => theme.aiChat.primaryFontSize[0]};\r\n  line-height: ${({ theme }) => theme.aiChat.primaryFontSize[1]};\r\n  color: ${({ theme }) => theme.aiChat.dropup.items.textColor};\r\n  cursor: pointer;\r\n  padding: 4px 12px;\r\n  &:hover {\r\n    background-color: ${({ theme }) => theme.aiChat.dropup.items.hover.backgroundColor};\r\n  }\r\n`;\r\n\r\nexport interface DropupSectionProps {\r\n  title: string;\r\n  items: string[];\r\n  onSelect: (selection: string) => void;\r\n  alwaysExpanded?: boolean;\r\n}\r\n\r\nexport default function DropupSection({\r\n  title,\r\n  items,\r\n  onSelect,\r\n  alwaysExpanded = false,\r\n}: DropupSectionProps) {\r\n  const [showItems, setShowItems] = useState(false);\r\n\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <Section>\r\n      <SectionHeader onClick={() => setShowItems((v) => !v)} theme={themeSettings}>\r\n        {title.toUpperCase()}\r\n      </SectionHeader>\r\n      {(showItems || alwaysExpanded) &&\r\n        items.map((item, index) => (\r\n          <DropupItem key={index} onClick={() => onSelect(item)} theme={themeSettings}>\r\n            {item}\r\n          </DropupItem>\r\n        ))}\r\n    </Section>\r\n  );\r\n}\r\n","import LoadingSpinner from '@/common/components/loading-spinner';\r\nimport Popper from '@mui/material/Popper';\r\nimport DropupSection, { DropupSectionProps } from './common/dropup-section';\r\nimport styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useThemeContext } from '@/theme-provider/theme-context';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst PopupContent = styled.div<Themable>`\r\n  font-family: ${({ theme }) => theme.typography.fontFamily};\r\n  font-size: ${({ theme }) => theme.aiChat.primaryFontSize[0]};\r\n  line-height: ${({ theme }) => theme.aiChat.primaryFontSize[1]};\r\n  background-color: ${({ theme }) => theme.aiChat.dropup.backgroundColor};\r\n  border-radius: ${({ theme }) => theme.aiChat.dropup.borderRadius};\r\n  box-shadow: ${({ theme }) => theme.aiChat.dropup.boxShadow};\r\n  padding-top: 8px;\r\n  padding-bottom: 8px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  row-gap: 4px;\r\n`;\r\n\r\nconst ErrorMessage = styled.div<Themable>`\r\n  font-size: ${({ theme }) => theme.aiChat.primaryFontSize[0]};\r\n  line-height: ${({ theme }) => theme.aiChat.primaryFontSize[1]};\r\n  color: ${({ theme }) => theme.aiChat.dropup.items.textColor};\r\n  padding: 4px 12px;\r\n`;\r\n\r\nexport const isCommand = (text: string) => text.startsWith('/');\r\n\r\ninterface ChatDropupProps {\r\n  recentPrompts: string[];\r\n  suggestions: string[];\r\n  isLoading: boolean;\r\n  onSelection: (q: string) => void;\r\n  anchorEl: HTMLElement | null;\r\n  text: string;\r\n  recommendationsError: boolean;\r\n}\r\n\r\nexport default function ChatDropup({\r\n  recentPrompts,\r\n  suggestions,\r\n  isLoading,\r\n  onSelection,\r\n  anchorEl,\r\n  text,\r\n  recommendationsError,\r\n}: ChatDropupProps) {\r\n  const sections: DropupSectionProps[] = [\r\n    {\r\n      title: '/recent searches',\r\n      items: recentPrompts,\r\n      onSelect: onSelection,\r\n    },\r\n    {\r\n      title: '/ai recommendations',\r\n      items: suggestions,\r\n      onSelect: onSelection,\r\n    },\r\n  ];\r\n\r\n  const filteredSections = sections.filter(\r\n    (section) => section.title.slice(0, text.length) === text,\r\n  );\r\n\r\n  const { themeSettings } = useThemeContext();\r\n  const { t } = useTranslation();\r\n\r\n  const alwaysExpanded = filteredSections.length === 1;\r\n\r\n  return (\r\n    <Popper\r\n      open={isCommand(text) && filteredSections.length > 0}\r\n      anchorEl={anchorEl}\r\n      placement={'top-start'}\r\n      modifiers={[\r\n        {\r\n          name: 'offset',\r\n          options: {\r\n            offset: [0, 4],\r\n          },\r\n        },\r\n      ]}\r\n      sx={{ zIndex: 3 }}\r\n    >\r\n      <PopupContent style={{ width: anchorEl?.offsetWidth }} theme={themeSettings}>\r\n        {isLoading && <LoadingSpinner />}\r\n        {!isLoading &&\r\n          !recommendationsError &&\r\n          filteredSections.map((props) => (\r\n            <DropupSection key={props.title} {...props} alwaysExpanded={alwaysExpanded} />\r\n          ))}\r\n        {recommendationsError && (\r\n          <ErrorMessage theme={themeSettings}>\r\n            {t('ai.errors.recommendationsNotAvailable')}\r\n          </ErrorMessage>\r\n        )}\r\n      </PopupContent>\r\n    </Popper>\r\n  );\r\n}\r\n","import MuiTooltip, { type TooltipProps as MuiTooltipProps } from '@mui/material/Tooltip';\r\nimport { useThemeContext } from '@/theme-provider';\r\n\r\ntype TooltipProps = Pick<MuiTooltipProps, 'title' | 'placement' | 'children'>;\r\n\r\nexport default function Tooltip({ title, placement = 'top', children }: TooltipProps) {\r\n  const { themeSettings } = useThemeContext();\r\n  return (\r\n    <MuiTooltip\r\n      title={title}\r\n      placement={placement}\r\n      disableInteractive={true}\r\n      componentsProps={{\r\n        tooltip: {\r\n          sx: {\r\n            bgcolor: themeSettings.aiChat.tooltips.backgroundColor,\r\n            color: themeSettings.aiChat.tooltips.textColor,\r\n            paddingX: '16px',\r\n            paddingY: '12px',\r\n            fontSize: '13px',\r\n            fontFamily: themeSettings.typography.fontFamily,\r\n            fontWeight: 400,\r\n            borderRadius: '4px',\r\n            boxShadow: themeSettings.aiChat.tooltips.boxShadow,\r\n          },\r\n        },\r\n        arrow: {\r\n          sx: {\r\n            color: themeSettings.aiChat.tooltips.backgroundColor,\r\n          },\r\n        },\r\n      }}\r\n      arrow\r\n    >\r\n      {children}\r\n    </MuiTooltip>\r\n  );\r\n}\r\n","export const CHAT_INPUT_MAX_LENGTH = 500;\r\n","import { ChangeEvent, KeyboardEvent, useCallback, useLayoutEffect, useRef, useState } from 'react';\r\n\r\nimport MessageIcon from './icons/message-icon';\r\nimport ClearChatIcon from './icons/clear-chat-icon';\r\nimport { useChatConfig } from './chat-config';\r\nimport styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport { css } from '@emotion/react';\r\nimport ChatDropup, { isCommand } from './chat-dropup';\r\nimport Tooltip from './common/tooltip';\r\nimport { CHAT_INPUT_MAX_LENGTH } from './common/constants';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst ChatInputContainer = styled.div<Themable>`\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: flex-end;\r\n  justify-content: space-between;\r\n\r\n  background-color: ${({ theme }) => theme.aiChat.backgroundColor};\r\n`;\r\n\r\nconst ClearHistoryButton = styled.button`\r\n  height: 34px;\r\n  background-color: inherit;\r\n  cursor: pointer;\r\n  border: none;\r\n`;\r\n\r\nconst TextInput = styled.textarea<Themable>`\r\n  font-size: inherit;\r\n  line-height: inherit;\r\n  resize: none;\r\n  overflow-y: auto;\r\n  box-sizing: border-box;\r\n  // size style\r\n  max-height: 88px;\r\n  width: 100%;\r\n  // spacing style\r\n  padding-top: 7px;\r\n  padding-bottom: 7px;\r\n  padding-left: 16px;\r\n  padding-right: 16px;\r\n  margin-left: 10px;\r\n  margin-right: 10px;\r\n  // border style\r\n  border-width: 1px;\r\n  border-color: rgb(38 46 61 / 0.15);\r\n  border-radius: 0.5rem;\r\n  &:focus {\r\n    outline: 1px solid ${({ theme }) => theme.aiChat.input.focus.outlineColor};\r\n  }\r\n  font-family: inherit;\r\n\r\n  color: ${({ theme }) => theme.aiChat.primaryTextColor};\r\n\r\n  background-color: ${({ theme }) => theme.aiChat.input.backgroundColor};\r\n`;\r\n\r\nconst SendMessageButton = styled.button<Themable & { disabled: boolean }>`\r\n  height: 34px;\r\n  background-color: inherit;\r\n  border-style: none;\r\n\r\n  color: ${({ theme }) => theme.aiChat.primaryTextColor};\r\n\r\n  ${({ disabled }) =>\r\n    disabled\r\n      ? css`\r\n          opacity: 0.3;\r\n          cursor: not-allowed;\r\n        `\r\n      : css`\r\n          opacity: 1;\r\n          cursor: pointer;\r\n        `}\r\n`;\r\n\r\nexport type ChatInputProps = {\r\n  onSendMessage: (message: string) => void;\r\n  onClearHistoryClick?: () => void;\r\n  disabled?: boolean;\r\n  recentPrompts: string[];\r\n  suggestions: string[];\r\n  isLoading: boolean;\r\n  recommendationsError: boolean;\r\n  onChange?: (text: string) => void;\r\n};\r\n\r\nconst MIN_TEXTAREA_HEIGHT = 34;\r\n\r\nexport default function ChatInput({\r\n  onSendMessage,\r\n  onClearHistoryClick,\r\n  disabled,\r\n  recentPrompts,\r\n  suggestions,\r\n  isLoading,\r\n  recommendationsError,\r\n  onChange,\r\n}: ChatInputProps) {\r\n  const [text, setText] = useState('');\r\n\r\n  const { inputPromptText } = useChatConfig();\r\n\r\n  const handleSendMessage = useCallback(() => {\r\n    if (disabled) return;\r\n\r\n    if (isCommand(text)) {\r\n      setText('');\r\n      return;\r\n    }\r\n\r\n    const finalText = text.trim();\r\n    if (finalText.length === 0) return;\r\n    onSendMessage(finalText);\r\n    setText('');\r\n  }, [disabled, onSendMessage, text]);\r\n\r\n  const handleDropupSelect = useCallback(\r\n    (selection: string) => {\r\n      onSendMessage(selection);\r\n      setText('');\r\n    },\r\n    [onSendMessage],\r\n  );\r\n\r\n  const onKeyDownInput = useCallback(\r\n    (e: KeyboardEvent) => {\r\n      if (e.key === 'Enter') {\r\n        e.preventDefault();\r\n        handleSendMessage();\r\n      } else if (e.key === 'Escape' && isCommand(text)) {\r\n        setText('');\r\n      }\r\n    },\r\n    [handleSendMessage, text],\r\n  );\r\n\r\n  const handleChange = useCallback(\r\n    (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n      onChange?.(e.target.value);\r\n      setText(e.target.value);\r\n    },\r\n    [onChange],\r\n  );\r\n\r\n  const ref = useRef<HTMLTextAreaElement>(null);\r\n\r\n  useLayoutEffect(() => {\r\n    if (ref.current) {\r\n      // Reset height - important to shrink on delete\r\n      ref.current.style.height = 'inherit';\r\n      // Set height\r\n      ref.current.style.height = `${Math.max(\r\n        ref.current.scrollHeight + 2, // account for 1px top/bottom border\r\n        MIN_TEXTAREA_HEIGHT,\r\n      )}px`;\r\n    }\r\n  }, [text]);\r\n\r\n  useLayoutEffect(() => {\r\n    if (ref.current) {\r\n      ref.current.focus({ preventScroll: true });\r\n    }\r\n  }, []);\r\n\r\n  const { themeSettings } = useThemeContext();\r\n  const { t } = useTranslation();\r\n\r\n  const handleBlur = useCallback((e: React.FocusEvent<HTMLTextAreaElement>) => {\r\n    if (document.getElementById('csdk-chatbot-frame')?.contains(e.relatedTarget)) {\r\n      const cb = (event: Event) => {\r\n        document.removeEventListener('mouseup', cb);\r\n        document.removeEventListener('keyup', cb);\r\n\r\n        if (event.type === 'mouseup' && document.getSelection()?.type !== 'Range') {\r\n          e.target.focus({ preventScroll: true });\r\n        }\r\n      };\r\n\r\n      document.addEventListener('mouseup', cb);\r\n      document.addEventListener('keyup', cb);\r\n    }\r\n  }, []);\r\n\r\n  return (\r\n    <ChatInputContainer theme={themeSettings}>\r\n      <ChatDropup\r\n        recentPrompts={recentPrompts}\r\n        suggestions={suggestions}\r\n        isLoading={isLoading}\r\n        onSelection={handleDropupSelect}\r\n        anchorEl={ref.current}\r\n        text={text}\r\n        recommendationsError={recommendationsError}\r\n      />\r\n      {onClearHistoryClick && (\r\n        <Tooltip title={t('ai.buttons.clearChat')} placement=\"bottom-start\">\r\n          <ClearHistoryButton aria-label=\"clear history\" onClick={onClearHistoryClick}>\r\n            <ClearChatIcon theme={themeSettings} />\r\n          </ClearHistoryButton>\r\n        </Tooltip>\r\n      )}\r\n      <TextInput\r\n        aria-label=\"chat input\"\r\n        onBlur={handleBlur}\r\n        maxLength={CHAT_INPUT_MAX_LENGTH}\r\n        ref={ref}\r\n        rows={1}\r\n        onChange={handleChange}\r\n        spellCheck={'true'}\r\n        placeholder={inputPromptText}\r\n        value={text}\r\n        onKeyDown={onKeyDownInput}\r\n        theme={themeSettings}\r\n      />\r\n      <SendMessageButton\r\n        aria-label=\"send chat message\"\r\n        disabled={disabled || text.length === 0}\r\n        onClick={handleSendMessage}\r\n        theme={themeSettings}\r\n      >\r\n        <span data-state=\"closed\">\r\n          <MessageIcon theme={themeSettings} />\r\n        </span>\r\n      </SendMessageButton>\r\n    </ChatInputContainer>\r\n  );\r\n}\r\n","import*as e from\"react\";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},t.apply(this,arguments)}const n=[\"children\",\"options\"],r={blockQuote:\"0\",breakLine:\"1\",breakThematic:\"2\",codeBlock:\"3\",codeFenced:\"4\",codeInline:\"5\",footnote:\"6\",footnoteReference:\"7\",gfmTask:\"8\",heading:\"9\",headingSetext:\"10\",htmlBlock:\"11\",htmlComment:\"12\",htmlSelfClosing:\"13\",image:\"14\",link:\"15\",linkAngleBraceStyleDetector:\"16\",linkBareUrlDetector:\"17\",linkMailtoDetector:\"18\",newlineCoalescer:\"19\",orderedList:\"20\",paragraph:\"21\",ref:\"22\",refImage:\"23\",refLink:\"24\",table:\"25\",tableSeparator:\"26\",text:\"27\",textBolded:\"28\",textEmphasized:\"29\",textEscaped:\"30\",textMarked:\"31\",textStrikethroughed:\"32\",unorderedList:\"33\"};var i;!function(e){e[e.MAX=0]=\"MAX\",e[e.HIGH=1]=\"HIGH\",e[e.MED=2]=\"MED\",e[e.LOW=3]=\"LOW\",e[e.MIN=4]=\"MIN\"}(i||(i={}));const l=[\"allowFullScreen\",\"allowTransparency\",\"autoComplete\",\"autoFocus\",\"autoPlay\",\"cellPadding\",\"cellSpacing\",\"charSet\",\"classId\",\"colSpan\",\"contentEditable\",\"contextMenu\",\"crossOrigin\",\"encType\",\"formAction\",\"formEncType\",\"formMethod\",\"formNoValidate\",\"formTarget\",\"frameBorder\",\"hrefLang\",\"inputMode\",\"keyParams\",\"keyType\",\"marginHeight\",\"marginWidth\",\"maxLength\",\"mediaGroup\",\"minLength\",\"noValidate\",\"radioGroup\",\"readOnly\",\"rowSpan\",\"spellCheck\",\"srcDoc\",\"srcLang\",\"srcSet\",\"tabIndex\",\"useMap\"].reduce((e,t)=>(e[t.toLowerCase()]=t,e),{class:\"className\",for:\"htmlFor\"}),o={amp:\"&\",apos:\"'\",gt:\">\",lt:\"<\",nbsp:\" \",quot:\"“\"},a=[\"style\",\"script\"],c=[\"src\",\"href\",\"data\",\"formAction\",\"srcDoc\",\"action\"],s=/([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi,d=/mailto:/i,u=/\\n{2,}$/,p=/^(\\s*>[\\s\\S]*?)(?=\\n\\n|$)/,f=/^ *> ?/gm,h=/^(?:\\[!([^\\]]*)\\]\\n)?([\\s\\S]*)/,m=/^ {2,}\\n/,g=/^(?:( *[-*_])){3,} *(?:\\n *)+\\n/,y=/^(?: {1,3})?(`{3,}|~{3,}) *(\\S+)? *([^\\n]*?)?\\n([\\s\\S]*?)(?:\\1\\n?|$)/,k=/^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/,x=/^(`+)((?:\\\\`|(?!\\1)`|[^`])+)\\1/,b=/^(?:\\n *)*\\n/,v=/\\r\\n?/g,C=/^\\[\\^([^\\]]+)](:(.*)((\\n+ {4,}.*)|(\\n(?!\\[\\^).+))*)/,$=/^\\[\\^([^\\]]+)]/,S=/\\f/g,w=/^---[ \\t]*\\n(.|\\n)*\\n---[ \\t]*\\n/,E=/^\\s*?\\[(x|\\s)\\]/,z=/^ *(#{1,6}) *([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/,L=/^ *(#{1,6}) +([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/,A=/^([^\\n]+)\\n *(=|-){3,} *(?:\\n *)+\\n/,O=/^ *(?!<[a-z][^ >/]* ?\\/>)<([a-z][^ >/]*) ?((?:[^>]*[^/])?)>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1\\b)[\\s\\S])*?)<\\/\\1>(?!<\\/\\1>)\\n*/i,T=/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi,B=/^<!--[\\s\\S]*?(?:-->)/,M=/^(data|aria|x)-[a-z_][a-z\\d_.-]*$/,R=/^ *<([a-z][a-z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i,I=/^\\{.*\\}$/,D=/^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,U=/^<([^ >]+@[^ >]+)>/,N=/^<([^ >]+:\\/[^ >]+)>/,j=/-([a-z])?/gi,H=/^(\\|.*)\\n(?: *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*))?\\n?/,P=/^\\[([^\\]]*)\\]:\\s+<?([^\\s>]+)>?\\s*(\"([^\"]*)\")?/,_=/^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/,F=/^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/,W=/(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/,G=/\\t/g,Z=/(^ *\\||\\| *$)/g,q=/^ *:-+: *$/,Q=/^ *:-+ *$/,V=/^ *-+: *$/,X=\"((?:\\\\[.*?\\\\][([].*?[)\\\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|\\\\\\\\\\\\1|[\\\\s\\\\S])+?)\",J=new RegExp(`^([*_])\\\\1${X}\\\\1\\\\1(?!\\\\1)`),K=new RegExp(`^([*_])${X}\\\\1(?!\\\\1)`),Y=new RegExp(`^(==)${X}\\\\1`),ee=new RegExp(`^(~~)${X}\\\\1`),te=/^\\\\([^0-9A-Za-z\\s])/,ne=/\\\\([^0-9A-Za-z\\s])/g,re=/^([\\s\\S](?:(?!  |[0-9]\\.)[^=*_~\\-\\n<`\\\\\\[!])*)/,ie=/^\\n+/,le=/^([ \\t]*)/,oe=/\\\\([^\\\\])/g,ae=/(?:^|\\n)( *)$/,ce=\"(?:\\\\d+\\\\.)\",se=\"(?:[*+-])\";function de(e){return\"( *)(\"+(1===e?ce:se)+\") +\"}const ue=de(1),pe=de(2);function fe(e){return new RegExp(\"^\"+(1===e?ue:pe))}const he=fe(1),me=fe(2);function ge(e){return new RegExp(\"^\"+(1===e?ue:pe)+\"[^\\\\n]*(?:\\\\n(?!\\\\1\"+(1===e?ce:se)+\" )[^\\\\n]*)*(\\\\n|$)\",\"gm\")}const ye=ge(1),ke=ge(2);function xe(e){const t=1===e?ce:se;return new RegExp(\"^( *)(\"+t+\") [\\\\s\\\\S]+?(?:\\\\n{2,}(?! )(?!\\\\1\"+t+\" (?!\"+t+\" ))\\\\n*|\\\\s*\\\\n*$)\")}const be=xe(1),ve=xe(2);function Ce(e,t){const n=1===t,i=n?be:ve,l=n?ye:ke,o=n?he:me;return{match:Me(function(e,t){const n=ae.exec(t.prevCapture);return n&&(t.list||!t.inline&&!t.simple)?i.exec(e=n[1]+e):null}),order:1,parse(e,t,r){const i=n?+e[2]:void 0,a=e[0].replace(u,\"\\n\").match(l);let c=!1;return{items:a.map(function(e,n){const i=o.exec(e)[0].length,l=new RegExp(\"^ {1,\"+i+\"}\",\"gm\"),s=e.replace(l,\"\").replace(o,\"\"),d=n===a.length-1,u=-1!==s.indexOf(\"\\n\\n\")||d&&c;c=u;const p=r.inline,f=r.list;let h;r.list=!0,u?(r.inline=!1,h=ze(s)+\"\\n\\n\"):(r.inline=!0,h=ze(s));const m=t(h,r);return r.inline=p,r.list=f,m}),ordered:n,start:i}},render:(t,n,i)=>e(t.ordered?\"ol\":\"ul\",{key:i.key,start:t.type===r.orderedList?t.start:void 0},t.items.map(function(t,r){return e(\"li\",{key:r},n(t,i))}))}}const $e=new RegExp(\"^\\\\[((?:\\\\[[^\\\\]]*\\\\]|[^\\\\[\\\\]]|\\\\](?=[^\\\\[]*\\\\]))*)\\\\]\\\\(\\\\s*<?((?:\\\\([^)]*\\\\)|[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+['\\\"]([\\\\s\\\\S]*?)['\\\"])?\\\\s*\\\\)\"),Se=/^!\\[(.*?)\\]\\( *((?:\\([^)]*\\)|[^() ])*) *\"?([^)\"]*)?\"?\\)/,we=[p,y,k,z,A,L,H,be,ve],Ee=[...we,/^[^\\n]+(?:  \\n|\\n{2,})/,O,B,R];function ze(e){let t=e.length;for(;t>0&&e[t-1]<=\" \";)t--;return e.slice(0,t)}function Le(e){return e.replace(/[ÀÁÂÃÄÅàáâãäåæÆ]/g,\"a\").replace(/[çÇ]/g,\"c\").replace(/[ðÐ]/g,\"d\").replace(/[ÈÉÊËéèêë]/g,\"e\").replace(/[ÏïÎîÍíÌì]/g,\"i\").replace(/[Ññ]/g,\"n\").replace(/[øØœŒÕõÔôÓóÒò]/g,\"o\").replace(/[ÜüÛûÚúÙù]/g,\"u\").replace(/[ŸÿÝý]/g,\"y\").replace(/[^a-z0-9- ]/gi,\"\").replace(/ /gi,\"-\").toLowerCase()}function Ae(e){return V.test(e)?\"right\":q.test(e)?\"center\":Q.test(e)?\"left\":null}function Oe(e,t,n,r){const i=n.inTable;n.inTable=!0;let l=[[]],o=\"\";function a(){if(!o)return;const e=l[l.length-1];e.push.apply(e,t(o,n)),o=\"\"}return e.trim().split(/(`[^`]*`|\\\\\\||\\|)/).filter(Boolean).forEach((e,t,n)=>{\"|\"===e.trim()&&(a(),r)?0!==t&&t!==n.length-1&&l.push([]):o+=e}),a(),n.inTable=i,l}function Te(e,t,n){n.inline=!0;const i=e[2]?e[2].replace(Z,\"\").split(\"|\").map(Ae):[],l=e[3]?function(e,t,n){return e.trim().split(\"\\n\").map(function(e){return Oe(e,t,n,!0)})}(e[3],t,n):[],o=Oe(e[1],t,n,!!l.length);return n.inline=!1,l.length?{align:i,cells:l,header:o,type:r.table}:{children:o,type:r.paragraph}}function Be(e,t){return null==e.align[t]?{}:{textAlign:e.align[t]}}function Me(e){return e.inline=1,e}function Re(e){return Me(function(t,n){return n.inline?e.exec(t):null})}function Ie(e){return Me(function(t,n){return n.inline||n.simple?e.exec(t):null})}function De(e){return function(t,n){return n.inline||n.simple?null:e.exec(t)}}function Ue(e){return Me(function(t){return e.exec(t)})}function Ne(e,t){if(t.inline||t.simple)return null;let n=\"\";e.split(\"\\n\").every(e=>(e+=\"\\n\",!we.some(t=>t.test(e))&&(n+=e,!!e.trim())));const r=ze(n);return\"\"==r?null:[n,,r]}const je=/(javascript|vbscript|data(?!:image)):/i;function He(e){try{const t=decodeURIComponent(e).replace(/[^A-Za-z0-9/:]/g,\"\");if(je.test(t))return null}catch(e){return null}return e}function Pe(e){return e.replace(oe,\"$1\")}function _e(e,t,n){const r=n.inline||!1,i=n.simple||!1;n.inline=!0,n.simple=!0;const l=e(t,n);return n.inline=r,n.simple=i,l}function Fe(e,t,n){const r=n.inline||!1,i=n.simple||!1;n.inline=!1,n.simple=!0;const l=e(t,n);return n.inline=r,n.simple=i,l}function We(e,t,n){const r=n.inline||!1;n.inline=!1;const i=e(t,n);return n.inline=r,i}const Ge=(e,t,n)=>({children:_e(t,e[2],n)});function Ze(){return{}}function qe(){return null}function Qe(...e){return e.filter(Boolean).join(\" \")}function Ve(e,t,n){let r=e;const i=t.split(\".\");for(;i.length&&(r=r[i[0]],void 0!==r);)i.shift();return r||n}function Xe(n=\"\",i={}){function u(e,n,...r){const l=Ve(i.overrides,`${e}.props`,{});return i.createElement(function(e,t){const n=Ve(t,e);return n?\"function\"==typeof n||\"object\"==typeof n&&\"render\"in n?n:Ve(t,`${e}.component`,e):e}(e,i.overrides),t({},n,l,{className:Qe(null==n?void 0:n.className,l.className)||void 0}),...r)}function Z(e){e=e.replace(w,\"\");let t=!1;i.forceInline?t=!0:i.forceBlock||(t=!1===W.test(e));const n=ae(oe(t?e:`${ze(e).replace(ie,\"\")}\\n\\n`,{inline:t}));for(;\"string\"==typeof n[n.length-1]&&!n[n.length-1].trim();)n.pop();if(null===i.wrapper)return n;const r=i.wrapper||(t?\"span\":\"div\");let l;if(n.length>1||i.forceWrapper)l=n;else{if(1===n.length)return l=n[0],\"string\"==typeof l?u(\"span\",{key:\"outer\"},l):l;l=null}return i.createElement(r,{key:\"outer\"},l)}function q(e,t){const n=t.match(s);return n?n.reduce(function(t,n){const r=n.indexOf(\"=\");if(-1!==r){const o=function(e){return-1!==e.indexOf(\"-\")&&null===e.match(M)&&(e=e.replace(j,function(e,t){return t.toUpperCase()})),e}(n.slice(0,r)).trim(),a=function(e){const t=e[0];return('\"'===t||\"'\"===t)&&e.length>=2&&e[e.length-1]===t?e.slice(1,-1):e}(n.slice(r+1).trim()),s=l[o]||o;if(\"ref\"===s)return t;const d=t[s]=function(e,t,n,r){return\"style\"===t?function(e){const t=[];let n=\"\",r=!1,i=!1,l=\"\";if(!e)return t;for(let o=0;o<e.length;o++){const a=e[o];if('\"'!==a&&\"'\"!==a||r||(i?a===l&&(i=!1,l=\"\"):(i=!0,l=a)),\"(\"===a&&n.endsWith(\"url\")?r=!0:\")\"===a&&r&&(r=!1),\";\"!==a||i||r)n+=a;else{const e=n.trim();if(e){const n=e.indexOf(\":\");if(n>0){const r=e.slice(0,n).trim(),i=e.slice(n+1).trim();t.push([r,i])}}n=\"\"}}const o=n.trim();if(o){const e=o.indexOf(\":\");if(e>0){const n=o.slice(0,e).trim(),r=o.slice(e+1).trim();t.push([n,r])}}return t}(n).reduce(function(t,[n,i]){return t[n.replace(/(-[a-z])/g,e=>e[1].toUpperCase())]=r(i,e,n),t},{}):-1!==c.indexOf(t)?r(n,e,t):(n.match(I)&&(n=n.slice(1,n.length-1)),\"true\"===n||\"false\"!==n&&n)}(e,o,a,i.sanitizer);\"string\"==typeof d&&(O.test(d)||R.test(d))&&(t[s]=Z(d.trim()))}else\"style\"!==n&&(t[l[n]||n]=!0);return t},{}):null}i.overrides=i.overrides||{},i.sanitizer=i.sanitizer||He,i.slugify=i.slugify||Le,i.namedCodesToUnicode=i.namedCodesToUnicode?t({},o,i.namedCodesToUnicode):o,i.createElement=i.createElement||e.createElement;const Q=[],V={},X={[r.blockQuote]:{match:De(p),order:1,parse(e,t,n){const[,r,i]=e[0].replace(f,\"\").match(h);return{alert:r,children:t(i,n)}},render(e,t,n){const l={key:n.key};return e.alert&&(l.className=\"markdown-alert-\"+i.slugify(e.alert.toLowerCase(),Le),e.children.unshift({attrs:{},children:[{type:r.text,text:e.alert}],noInnerParse:!0,type:r.htmlBlock,tag:\"header\"})),u(\"blockquote\",l,t(e.children,n))}},[r.breakLine]:{match:Ue(m),order:1,parse:Ze,render:(e,t,n)=>u(\"br\",{key:n.key})},[r.breakThematic]:{match:De(g),order:1,parse:Ze,render:(e,t,n)=>u(\"hr\",{key:n.key})},[r.codeBlock]:{match:De(k),order:0,parse:e=>({lang:void 0,text:ze(e[0].replace(/^ {4}/gm,\"\")).replace(ne,\"$1\")}),render:(e,n,r)=>u(\"pre\",{key:r.key},u(\"code\",t({},e.attrs,{className:e.lang?`lang-${e.lang}`:\"\"}),e.text))},[r.codeFenced]:{match:De(y),order:0,parse:e=>({attrs:q(\"code\",e[3]||\"\"),lang:e[2]||void 0,text:e[4],type:r.codeBlock})},[r.codeInline]:{match:Ie(x),order:3,parse:e=>({text:e[2].replace(ne,\"$1\")}),render:(e,t,n)=>u(\"code\",{key:n.key},e.text)},[r.footnote]:{match:De(C),order:0,parse:e=>(Q.push({footnote:e[2],identifier:e[1]}),{}),render:qe},[r.footnoteReference]:{match:Re($),order:1,parse:e=>({target:`#${i.slugify(e[1],Le)}`,text:e[1]}),render:(e,t,n)=>u(\"a\",{key:n.key,href:i.sanitizer(e.target,\"a\",\"href\")},u(\"sup\",{key:n.key},e.text))},[r.gfmTask]:{match:Re(E),order:1,parse:e=>({completed:\"x\"===e[1].toLowerCase()}),render:(e,t,n)=>u(\"input\",{checked:e.completed,key:n.key,readOnly:!0,type:\"checkbox\"})},[r.heading]:{match:De(i.enforceAtxHeadings?L:z),order:1,parse:(e,t,n)=>({children:_e(t,e[2],n),id:i.slugify(e[2],Le),level:e[1].length}),render:(e,t,n)=>u(`h${e.level}`,{id:e.id,key:n.key},t(e.children,n))},[r.headingSetext]:{match:De(A),order:0,parse:(e,t,n)=>({children:_e(t,e[1],n),level:\"=\"===e[2]?1:2,type:r.heading})},[r.htmlBlock]:{match:Ue(O),order:1,parse(e,t,n){const[,r]=e[3].match(le),i=new RegExp(`^${r}`,\"gm\"),l=e[3].replace(i,\"\"),o=(c=l,Ee.some(e=>e.test(c))?We:_e);var c;const s=e[1].toLowerCase(),d=-1!==a.indexOf(s),u=(d?s:e[1]).trim(),p={attrs:q(u,e[2]),noInnerParse:d,tag:u};return n.inAnchor=n.inAnchor||\"a\"===s,d?p.text=e[3]:p.children=o(t,l,n),n.inAnchor=!1,p},render:(e,n,r)=>u(e.tag,t({key:r.key},e.attrs),e.text||(e.children?n(e.children,r):\"\"))},[r.htmlSelfClosing]:{match:Ue(R),order:1,parse(e){const t=e[1].trim();return{attrs:q(t,e[2]||\"\"),tag:t}},render:(e,n,r)=>u(e.tag,t({},e.attrs,{key:r.key}))},[r.htmlComment]:{match:Ue(B),order:1,parse:()=>({}),render:qe},[r.image]:{match:Ie(Se),order:1,parse:e=>({alt:e[1],target:Pe(e[2]),title:e[3]}),render:(e,t,n)=>u(\"img\",{key:n.key,alt:e.alt||void 0,title:e.title||void 0,src:i.sanitizer(e.target,\"img\",\"src\")})},[r.link]:{match:Re($e),order:3,parse:(e,t,n)=>({children:Fe(t,e[1],n),target:Pe(e[2]),title:e[3]}),render:(e,t,n)=>u(\"a\",{key:n.key,href:i.sanitizer(e.target,\"a\",\"href\"),title:e.title},t(e.children,n))},[r.linkAngleBraceStyleDetector]:{match:Re(N),order:0,parse:e=>({children:[{text:e[1],type:r.text}],target:e[1],type:r.link})},[r.linkBareUrlDetector]:{match:Me((e,t)=>t.inAnchor||i.disableAutoLink?null:Re(D)(e,t)),order:0,parse:e=>({children:[{text:e[1],type:r.text}],target:e[1],title:void 0,type:r.link})},[r.linkMailtoDetector]:{match:Re(U),order:0,parse(e){let t=e[1],n=e[1];return d.test(n)||(n=\"mailto:\"+n),{children:[{text:t.replace(\"mailto:\",\"\"),type:r.text}],target:n,type:r.link}}},[r.orderedList]:Ce(u,1),[r.unorderedList]:Ce(u,2),[r.newlineCoalescer]:{match:De(b),order:3,parse:Ze,render:()=>\"\\n\"},[r.paragraph]:{match:Me(Ne),order:3,parse:Ge,render:(e,t,n)=>u(\"p\",{key:n.key},t(e.children,n))},[r.ref]:{match:Re(P),order:0,parse:e=>(V[e[1]]={target:e[2],title:e[4]},{}),render:qe},[r.refImage]:{match:Ie(_),order:0,parse:e=>({alt:e[1]||void 0,ref:e[2]}),render:(e,t,n)=>V[e.ref]?u(\"img\",{key:n.key,alt:e.alt,src:i.sanitizer(V[e.ref].target,\"img\",\"src\"),title:V[e.ref].title}):null},[r.refLink]:{match:Re(F),order:0,parse:(e,t,n)=>({children:t(e[1],n),fallbackChildren:e[0],ref:e[2]}),render:(e,t,n)=>V[e.ref]?u(\"a\",{key:n.key,href:i.sanitizer(V[e.ref].target,\"a\",\"href\"),title:V[e.ref].title},t(e.children,n)):u(\"span\",{key:n.key},e.fallbackChildren)},[r.table]:{match:De(H),order:1,parse:Te,render(e,t,n){const r=e;return u(\"table\",{key:n.key},u(\"thead\",null,u(\"tr\",null,r.header.map(function(e,i){return u(\"th\",{key:i,style:Be(r,i)},t(e,n))}))),u(\"tbody\",null,r.cells.map(function(e,i){return u(\"tr\",{key:i},e.map(function(e,i){return u(\"td\",{key:i,style:Be(r,i)},t(e,n))}))})))}},[r.text]:{match:Ue(re),order:4,parse:e=>({text:e[0].replace(T,(e,t)=>i.namedCodesToUnicode[t]?i.namedCodesToUnicode[t]:e)}),render:e=>e.text},[r.textBolded]:{match:Ie(J),order:2,parse:(e,t,n)=>({children:t(e[2],n)}),render:(e,t,n)=>u(\"strong\",{key:n.key},t(e.children,n))},[r.textEmphasized]:{match:Ie(K),order:3,parse:(e,t,n)=>({children:t(e[2],n)}),render:(e,t,n)=>u(\"em\",{key:n.key},t(e.children,n))},[r.textEscaped]:{match:Ie(te),order:1,parse:e=>({text:e[1],type:r.text})},[r.textMarked]:{match:Ie(Y),order:3,parse:Ge,render:(e,t,n)=>u(\"mark\",{key:n.key},t(e.children,n))},[r.textStrikethroughed]:{match:Ie(ee),order:3,parse:Ge,render:(e,t,n)=>u(\"del\",{key:n.key},t(e.children,n))}};!0===i.disableParsingRawHTML&&(delete X[r.htmlBlock],delete X[r.htmlSelfClosing]);const oe=function(e){let t=Object.keys(e);function n(r,i){let l,o,a=[],c=\"\",s=\"\";for(i.prevCapture=i.prevCapture||\"\";r;){let d=0;for(;d<t.length;){if(c=t[d],l=e[c],i.inline&&!l.match.inline){d++;continue}const u=l.match(r,i);if(u){s=u[0],i.prevCapture+=s,r=r.substring(s.length),o=l.parse(u,n,i),null==o.type&&(o.type=c),a.push(o);break}d++}}return i.prevCapture=\"\",a}return t.sort(function(t,n){let r=e[t].order,i=e[n].order;return r!==i?r-i:t<n?-1:1}),function(e,t){return n(function(e){return e.replace(v,\"\\n\").replace(S,\"\").replace(G,\"    \")}(e),t)}}(X),ae=(ce=function(e,t){return function(n,r,i){const l=e[n.type].render;return t?t(()=>l(n,r,i),n,r,i):l(n,r,i)}}(X,i.renderRule),function e(t,n={}){if(Array.isArray(t)){const r=n.key,i=[];let l=!1;for(let r=0;r<t.length;r++){n.key=r;const o=e(t[r],n),a=\"string\"==typeof o;a&&l?i[i.length-1]+=o:null!==o&&i.push(o),l=a}return n.key=r,i}return ce(t,e,n)});var ce;const se=Z(n);return Q.length?u(\"div\",null,se,u(\"footer\",{key:\"footer\"},Q.map(function(e){return u(\"div\",{id:i.slugify(e.identifier,Le),key:e.identifier},e.identifier,ae(oe(e.footnote,{inline:!0})))}))):se}export default t=>{let{children:r=\"\",options:i}=t,l=function(e,t){if(null==e)return{};var n,r,i={},l=Object.keys(e);for(r=0;r<l.length;r++)t.indexOf(n=l[r])>=0||(i[n]=e[n]);return i}(t,n);return e.cloneElement(Xe(r,i),l)};export{r as RuleType,Xe as compiler,He as sanitizer,Le as slugify};\n//# sourceMappingURL=index.modern.js.map\n","import { useThemeContext } from '@/theme-provider';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { css } from '@emotion/react';\r\nimport styled from '@emotion/styled';\r\nimport { FC, PropsWithChildren } from 'react';\r\nimport Markdown from 'markdown-to-jsx';\r\n\r\ntype Alignable = {\r\n  align: 'left' | 'right' | 'full';\r\n};\r\n\r\nconst FlexContainer = styled.div<Alignable>`\r\n  display: flex;\r\n\r\n  ${({ align }) =>\r\n    align === 'right'\r\n      ? css`\r\n          justify-content: flex-end;\r\n        `\r\n      : css`\r\n          justify-content: flex-start;\r\n        `}\r\n`;\r\n\r\nexport const MessageContainer = styled.div<Themable & Alignable>`\r\n  font-size: inherit;\r\n  line-height: inherit;\r\n  padding-top: 8.5px;\r\n  padding-bottom: 8.5px;\r\n  padding-left: 0.5rem;\r\n  padding-right: 0.5rem;\r\n  white-space: pre-wrap;\r\n  overflow-wrap: break-word;\r\n  box-sizing: border-box;\r\n\r\n  ${({ align }) =>\r\n    align === 'right'\r\n      ? css`\r\n          text-align: right;\r\n          border-radius: 10px 10px 0px 10px;\r\n        `\r\n      : css`\r\n          text-align: left;\r\n          border-radius: 10px 10px 10px 0px;\r\n        `}\r\n\r\n  ${({ align }) =>\r\n    align !== 'full'\r\n      ? css`\r\n          max-width: 85%;\r\n        `\r\n      : ''}\r\n\r\n  color: ${({ theme }) => theme.aiChat.primaryTextColor};\r\n  background-color: ${({ theme, align }) =>\r\n    align === 'right'\r\n      ? theme.aiChat.userMessages.backgroundColor\r\n      : theme.aiChat.systemMessages.backgroundColor};\r\n`;\r\n\r\nconst TextMessage: FC<PropsWithChildren<Alignable>> = ({ align, children }) => {\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <FlexContainer theme={themeSettings} align={align}>\r\n      <MessageContainer theme={themeSettings} align={align}>\r\n        {typeof children === 'string' ? <Markdown>{children}</Markdown> : children}\r\n      </MessageContainer>\r\n    </FlexContainer>\r\n  );\r\n};\r\n\r\nexport default TextMessage;\r\n","import { useChatConfig } from '../chat-config';\r\nimport TextMessage from './text-message';\r\n\r\nexport default function ChatWelcomeMessage() {\r\n  const { welcomeText } = useChatConfig();\r\n\r\n  if (welcomeText === false) {\r\n    return null;\r\n  }\r\n\r\n  return <TextMessage align=\"left\">{welcomeText}</TextMessage>;\r\n}\r\n","import ExclamationMarkIcon from '@/common/icons/exclamation-mark-icon';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport styled from '@emotion/styled';\r\n\r\ntype ErrorPageProps = {\r\n  text: string;\r\n  action?: {\r\n    text: string;\r\n    onClick: () => void;\r\n  };\r\n};\r\n\r\nconst Container = styled.div`\r\n  margin: auto;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  row-gap: 21px;\r\n`;\r\n\r\nconst Title = styled.div<Themable>`\r\n  color: ${({ theme }) => theme.aiChat.primaryTextColor};\r\n  text-align: center;\r\n  font-weight: 600;\r\n`;\r\n\r\nconst ActionButton = styled.div`\r\n  color: rgba(54, 163, 217, 1);\r\n  cursor: pointer;\r\n`;\r\n\r\nexport default function ErrorContainer({ text, action }: ErrorPageProps) {\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <Container>\r\n      <Title theme={themeSettings}>{text}</Title>\r\n      <ExclamationMarkIcon />\r\n      {action && <ActionButton onClick={action.onClick}>{action.text}</ActionButton>}\r\n    </Container>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider/theme-context';\r\nimport styled from '@emotion/styled';\r\n\r\nconst Dot = styled.div<{ color?: string }>`\r\n  width: 5px;\r\n  height: 5px;\r\n  border-radius: 50%;\r\n  background-color: ${(props) => props.color};\r\n  animation: hop 0.9s ease-out infinite;\r\n\r\n  &:nth-of-type(2) {\r\n    animation-delay: 0.1s;\r\n  }\r\n\r\n  &:nth-of-type(3) {\r\n    animation-delay: 0.2s;\r\n  }\r\n\r\n  &:nth-of-type(4) {\r\n    animation-delay: 0.3s;\r\n  }\r\n\r\n  @keyframes hop {\r\n    0%,\r\n    40% {\r\n      transform: translateY(0);\r\n    }\r\n    20% {\r\n      transform: translateY(-100%);\r\n    }\r\n  }\r\n`;\r\n\r\nexport default function LoadingDotsIcon() {\r\n  const { themeSettings } = useThemeContext();\r\n  const color = themeSettings.aiChat.icons.color;\r\n\r\n  return (\r\n    <div\r\n      className=\"csdk-flex csdk-justify-between csdk-w-[28px] csdk-py-[14.5px]\"\r\n      aria-label=\"loading dots\"\r\n    >\r\n      <Dot color={color} />\r\n      <Dot color={color} />\r\n      <Dot color={color} />\r\n      <Dot color={color} />\r\n    </div>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { css } from '@emotion/react';\r\nimport styled from '@emotion/styled';\r\n\r\ntype Props = {\r\n  children: string | JSX.Element;\r\n  align: 'left' | 'right';\r\n  onClick?: () => void;\r\n  disabled?: boolean;\r\n  onMouseEnter?: () => void;\r\n  onMouseLeave?: () => void;\r\n  accessibleName?: string;\r\n};\r\n\r\ntype Alignable = {\r\n  align: 'left' | 'right' | 'full';\r\n};\r\n\r\nconst FlexContainer = styled.div<Alignable>`\r\n  display: flex;\r\n\r\n  ${({ align }) =>\r\n    align === 'right'\r\n      ? css`\r\n          justify-content: flex-end;\r\n        `\r\n      : css`\r\n          justify-content: flex-start;\r\n        `}\r\n`;\r\n\r\nconst MessageButton = styled.button<Themable & Alignable>`\r\n  font-family: inherit;\r\n  font-size: inherit;\r\n  line-height: inherit;\r\n  border: ${({ theme }) => theme.aiChat.clickableMessages.border};\r\n  padding: 0;\r\n  cursor: pointer;\r\n\r\n  color: ${({ theme }) => theme.aiChat.clickableMessages.textColor};\r\n  background-color: ${({ theme }) => theme.aiChat.clickableMessages.backgroundColor};\r\n  &:hover {\r\n    color: ${({ theme }) => theme.aiChat.clickableMessages.hover.textColor};\r\n    background-color: ${({ theme }) => theme.aiChat.clickableMessages.hover.backgroundColor};\r\n  }\r\n  border-radius: 20px;\r\n\r\n  ${({ align }) =>\r\n    align === 'right'\r\n      ? css`\r\n          text-align: right;\r\n        `\r\n      : css`\r\n          text-align: left;\r\n        `}\r\n\r\n  ${({ align }) =>\r\n    align !== 'full'\r\n      ? css`\r\n          max-width: 382px;\r\n        `\r\n      : ''}\r\n\r\n  ${({ theme }) => {\r\n    const { borderGradient, borderRadius } = theme.aiChat.suggestions;\r\n    if (borderGradient) {\r\n      const [firstColor, secondColor] = borderGradient;\r\n      return css`\r\n        border: none;\r\n        position: relative;\r\n        border-radius: ${borderRadius};\r\n        &:before {\r\n          content: '';\r\n          position: absolute;\r\n          top: 0;\r\n          left: 0;\r\n          right: 0;\r\n          bottom: 0;\r\n          border-radius: ${borderRadius};\r\n          border: 1px solid transparent;\r\n          background: linear-gradient(30deg, ${firstColor}, ${secondColor}) border-box;\r\n          -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);\r\n          -webkit-mask-composite: destination-out;\r\n          mask-composite: exclude;\r\n        }\r\n      `;\r\n    }\r\n    return '';\r\n  }}\r\n`;\r\n\r\nexport default function ClickableMessage({\r\n  children,\r\n  align,\r\n  onClick,\r\n  onMouseEnter,\r\n  onMouseLeave,\r\n  accessibleName,\r\n}: Props) {\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <FlexContainer align={align}>\r\n      <MessageButton\r\n        aria-label={accessibleName}\r\n        theme={themeSettings}\r\n        onClick={onClick}\r\n        align={align}\r\n        onMouseEnter={onMouseEnter}\r\n        onMouseLeave={onMouseLeave}\r\n      >\r\n        {children}\r\n      </MessageButton>\r\n    </FlexContainer>\r\n  );\r\n}\r\n","import { useTranslation } from 'react-i18next';\r\nimport ClickableMessage from './clickable-message';\r\nimport TextMessage from './text-message';\r\n\r\nexport type ClearHistoryMessageProps = {\r\n  onConfirm: () => void;\r\n  onCancel: () => void;\r\n};\r\n\r\nexport default function ClearHistoryMessage({ onCancel, onConfirm }: ClearHistoryMessageProps) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <>\r\n      <TextMessage align=\"left\">{t('ai.clearHistoryPrompt')}</TextMessage>\r\n      <div className=\"csdk-flex csdk-gap-x-2\">\r\n        <ClickableMessage align=\"right\" onClick={onConfirm} accessibleName=\"confirm clear chat\">\r\n          <div className=\"csdk-py-[6px] csdk-px-[20px]\">{t('ai.buttons.yes')}</div>\r\n        </ClickableMessage>\r\n        <ClickableMessage align=\"right\" onClick={onCancel} accessibleName=\"cancel clear chat\">\r\n          <div className=\"csdk-py-[6px] csdk-px-[20px]\">{t('ai.buttons.no')}</div>\r\n        </ClickableMessage>\r\n      </div>\r\n    </>\r\n  );\r\n}\r\n","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogUtilityClass(slot) {\n  return generateUtilityClass('MuiDialog', slot);\n}\nconst dialogClasses = generateUtilityClasses('MuiDialog', ['root', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);\nexport default dialogClasses;","'use client';\n\nimport * as React from 'react';\nconst DialogContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  DialogContext.displayName = 'DialogContext';\n}\nexport default DialogContext;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useId from '@mui/utils/useId';\nimport capitalize from \"../utils/capitalize.js\";\nimport Modal from \"../Modal/index.js\";\nimport Fade from \"../Fade/index.js\";\nimport Paper from \"../Paper/index.js\";\nimport dialogClasses, { getDialogUtilityClass } from \"./dialogClasses.js\";\nimport DialogContext from \"./DialogContext.js\";\nimport Backdrop from \"../Backdrop/index.js\";\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DialogBackdrop = styled(Backdrop, {\n  name: 'MuiDialog',\n  slot: 'Backdrop',\n  overrides: (props, styles) => styles.backdrop\n})({\n  // Improve scrollable dialog support.\n  zIndex: -1\n});\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    scroll,\n    maxWidth,\n    fullWidth,\n    fullScreen\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    container: ['container', `scroll${capitalize(scroll)}`],\n    paper: ['paper', `paperScroll${capitalize(scroll)}`, `paperWidth${capitalize(String(maxWidth))}`, fullWidth && 'paperFullWidth', fullScreen && 'paperFullScreen']\n  };\n  return composeClasses(slots, getDialogUtilityClass, classes);\n};\nconst DialogRoot = styled(Modal, {\n  name: 'MuiDialog',\n  slot: 'Root',\n  overridesResolver: (props, styles) => styles.root\n})({\n  '@media print': {\n    // Use !important to override the Modal inline-style.\n    position: 'absolute !important'\n  }\n});\nconst DialogContainer = styled('div', {\n  name: 'MuiDialog',\n  slot: 'Container',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.container, styles[`scroll${capitalize(ownerState.scroll)}`]];\n  }\n})({\n  height: '100%',\n  '@media print': {\n    height: 'auto'\n  },\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0,\n  variants: [{\n    props: {\n      scroll: 'paper'\n    },\n    style: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center'\n    }\n  }, {\n    props: {\n      scroll: 'body'\n    },\n    style: {\n      overflowY: 'auto',\n      overflowX: 'hidden',\n      textAlign: 'center',\n      '&::after': {\n        content: '\"\"',\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        height: '100%',\n        width: '0'\n      }\n    }\n  }]\n});\nconst DialogPaper = styled(Paper, {\n  name: 'MuiDialog',\n  slot: 'Paper',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.paper, styles[`scrollPaper${capitalize(ownerState.scroll)}`], styles[`paperWidth${capitalize(String(ownerState.maxWidth))}`], ownerState.fullWidth && styles.paperFullWidth, ownerState.fullScreen && styles.paperFullScreen];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  margin: 32,\n  position: 'relative',\n  overflowY: 'auto',\n  '@media print': {\n    overflowY: 'visible',\n    boxShadow: 'none'\n  },\n  variants: [{\n    props: {\n      scroll: 'paper'\n    },\n    style: {\n      display: 'flex',\n      flexDirection: 'column',\n      maxHeight: 'calc(100% - 64px)'\n    }\n  }, {\n    props: {\n      scroll: 'body'\n    },\n    style: {\n      display: 'inline-block',\n      verticalAlign: 'middle',\n      textAlign: 'initial'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.maxWidth,\n    style: {\n      maxWidth: 'calc(100% - 64px)'\n    }\n  }, {\n    props: {\n      maxWidth: 'xs'\n    },\n    style: {\n      maxWidth: theme.breakpoints.unit === 'px' ? Math.max(theme.breakpoints.values.xs, 444) : `max(${theme.breakpoints.values.xs}${theme.breakpoints.unit}, 444px)`,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        [theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2)]: {\n          maxWidth: 'calc(100% - 64px)'\n        }\n      }\n    }\n  }, ...Object.keys(theme.breakpoints.values).filter(maxWidth => maxWidth !== 'xs').map(maxWidth => ({\n    props: {\n      maxWidth\n    },\n    style: {\n      maxWidth: `${theme.breakpoints.values[maxWidth]}${theme.breakpoints.unit}`,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        [theme.breakpoints.down(theme.breakpoints.values[maxWidth] + 32 * 2)]: {\n          maxWidth: 'calc(100% - 64px)'\n        }\n      }\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.fullWidth,\n    style: {\n      width: 'calc(100% - 64px)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.fullScreen,\n    style: {\n      margin: 0,\n      width: '100%',\n      maxWidth: '100%',\n      height: '100%',\n      maxHeight: 'none',\n      borderRadius: 0,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        margin: 0,\n        maxWidth: '100%'\n      }\n    }\n  }]\n})));\n\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\nconst Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialog'\n  });\n  const theme = useTheme();\n  const defaultTransitionDuration = {\n    enter: theme.transitions.duration.enteringScreen,\n    exit: theme.transitions.duration.leavingScreen\n  };\n  const {\n    'aria-describedby': ariaDescribedby,\n    'aria-labelledby': ariaLabelledbyProp,\n    'aria-modal': ariaModal = true,\n    BackdropComponent,\n    BackdropProps,\n    children,\n    className,\n    disableEscapeKeyDown = false,\n    fullScreen = false,\n    fullWidth = false,\n    maxWidth = 'sm',\n    onBackdropClick,\n    onClick,\n    onClose,\n    open,\n    PaperComponent = Paper,\n    PaperProps = {},\n    scroll = 'paper',\n    slots = {},\n    slotProps = {},\n    TransitionComponent = Fade,\n    transitionDuration = defaultTransitionDuration,\n    TransitionProps,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disableEscapeKeyDown,\n    fullScreen,\n    fullWidth,\n    maxWidth,\n    scroll\n  };\n  const classes = useUtilityClasses(ownerState);\n  const backdropClick = React.useRef();\n  const handleMouseDown = event => {\n    // We don't want to close the dialog when clicking the dialog content.\n    // Make sure the event starts and ends on the same DOM element.\n    backdropClick.current = event.target === event.currentTarget;\n  };\n  const handleBackdropClick = event => {\n    if (onClick) {\n      onClick(event);\n    }\n\n    // Ignore the events not coming from the \"backdrop\".\n    if (!backdropClick.current) {\n      return;\n    }\n    backdropClick.current = null;\n    if (onBackdropClick) {\n      onBackdropClick(event);\n    }\n    if (onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n  const ariaLabelledby = useId(ariaLabelledbyProp);\n  const dialogContextValue = React.useMemo(() => {\n    return {\n      titleId: ariaLabelledby\n    };\n  }, [ariaLabelledby]);\n  const backwardCompatibleSlots = {\n    transition: TransitionComponent,\n    ...slots\n  };\n  const backwardCompatibleSlotProps = {\n    transition: TransitionProps,\n    paper: PaperProps,\n    backdrop: BackdropProps,\n    ...slotProps\n  };\n  const externalForwardedProps = {\n    slots: backwardCompatibleSlots,\n    slotProps: backwardCompatibleSlotProps\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    elementType: DialogRoot,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.root, className),\n    ref\n  });\n  const [BackdropSlot, backdropSlotProps] = useSlot('backdrop', {\n    elementType: DialogBackdrop,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState\n  });\n  const [PaperSlot, paperSlotProps] = useSlot('paper', {\n    elementType: DialogPaper,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.paper, PaperProps.className)\n  });\n  const [ContainerSlot, containerSlotProps] = useSlot('container', {\n    elementType: DialogContainer,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.container)\n  });\n  const [TransitionSlot, transitionSlotProps] = useSlot('transition', {\n    elementType: Fade,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      appear: true,\n      in: open,\n      timeout: transitionDuration,\n      role: 'presentation'\n    }\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    closeAfterTransition: true,\n    slots: {\n      backdrop: BackdropSlot\n    },\n    slotProps: {\n      backdrop: {\n        transitionDuration,\n        as: BackdropComponent,\n        ...backdropSlotProps\n      }\n    },\n    disableEscapeKeyDown: disableEscapeKeyDown,\n    onClose: onClose,\n    open: open,\n    onClick: handleBackdropClick,\n    ...rootSlotProps,\n    ...other,\n    children: /*#__PURE__*/_jsx(TransitionSlot, {\n      ...transitionSlotProps,\n      children: /*#__PURE__*/_jsx(ContainerSlot, {\n        onMouseDown: handleMouseDown,\n        ...containerSlotProps,\n        children: /*#__PURE__*/_jsx(PaperSlot, {\n          as: PaperComponent,\n          elevation: 24,\n          role: \"dialog\",\n          \"aria-describedby\": ariaDescribedby,\n          \"aria-labelledby\": ariaLabelledby,\n          \"aria-modal\": ariaModal,\n          ...paperSlotProps,\n          children: /*#__PURE__*/_jsx(DialogContext.Provider, {\n            value: dialogContextValue,\n            children: children\n          })\n        })\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Dialog.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The id(s) of the element(s) that describe the dialog.\n   */\n  'aria-describedby': PropTypes.string,\n  /**\n   * The id(s) of the element(s) that label the dialog.\n   */\n  'aria-labelledby': PropTypes.string,\n  /**\n   * Informs assistive technologies that the element is modal.\n   * It's added on the element with role=\"dialog\".\n   * @default true\n   */\n  'aria-modal': PropTypes.oneOfType([PropTypes.oneOf(['false', 'true']), PropTypes.bool]),\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.\n   * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.\n   * @default styled(Backdrop, {\n   *   name: 'MuiModal',\n   *   slot: 'Backdrop',\n   *   overridesResolver: (props, styles) => {\n   *     return styles.backdrop;\n   *   },\n   * })({\n   *   zIndex: -1,\n   * })\n   */\n  BackdropComponent: PropTypes.elementType,\n  /**\n   * @ignore\n   */\n  BackdropProps: PropTypes.object,\n  /**\n   * Dialog children, usually the included sub-components.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   * @default false\n   */\n  disableEscapeKeyDown: PropTypes.bool,\n  /**\n   * If `true`, the dialog is full-screen.\n   * @default false\n   */\n  fullScreen: PropTypes.bool,\n  /**\n   * If `true`, the dialog stretches to `maxWidth`.\n   *\n   * Notice that the dialog width grow is limited by the default margin.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * Determine the max-width of the dialog.\n   * The dialog width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   * @default 'sm'\n   */\n  maxWidth: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), PropTypes.string]),\n  /**\n   * Callback fired when the backdrop is clicked.\n   * @deprecated Use the `onClose` prop with the `reason` argument to handle the `backdropClick` events.\n   */\n  onBackdropClick: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * The component used to render the body of the dialog.\n   * @default Paper\n   */\n  PaperComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Paper`](https://mui.com/material-ui/api/paper/) element.\n   * @default {}\n   * @deprecated Use `slotProps.paper` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  PaperProps: PropTypes.object,\n  /**\n   * Determine the container for scrolling the dialog.\n   * @default 'paper'\n   */\n  scroll: PropTypes.oneOf(['body', 'paper']),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    container: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    container: PropTypes.elementType,\n    paper: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @default Fade\n   * @deprecated Use `slots.transition` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   * @default {\n   *   enter: theme.transitions.duration.enteringScreen,\n   *   exit: theme.transitions.duration.leavingScreen,\n   * }\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated Use `slotProps.transition` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Dialog;","export default function CloseDialogIcon({ fillColor = '#262E3D' }: { fillColor?: string }) {\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" fill=\"none\">\r\n      <rect x=\"1\" y=\"1\" width=\"28\" height=\"28\" rx=\"14\" stroke=\"#9EA2AB\" />\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M14.2929 15L9.14645 9.85355C8.95118 9.65829 8.95118 9.34171 9.14645 9.14645C9.34171 8.95118 9.65829 8.95118 9.85355 9.14645L15 14.2929L20.1464 9.14645C20.3417 8.95118 20.6583 8.95118 20.8536 9.14645C21.0488 9.34171 21.0488 9.65829 20.8536 9.85355L15.7071 15L20.8536 20.1464C21.0488 20.3417 21.0488 20.6583 20.8536 20.8536C20.6583 21.0488 20.3417 21.0488 20.1464 20.8536L15 15.7071L9.85355 20.8536C9.65829 21.0488 9.34171 21.0488 9.14645 20.8536C8.95118 20.6583 8.95118 20.3417 9.14645 20.1464L14.2929 15Z\"\r\n        fill={fillColor}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","/* eslint-disable sonarjs/no-duplicate-string */\r\nexport const colors = {\r\n  row: {\r\n    hover: 'rgba(224, 224, 224, 0.3)',\r\n  },\r\n  secondary: {\r\n    default: 'rgba(38, 46, 61, 0.1)',\r\n    hover: 'rgba(38, 46, 61, 0.17)',\r\n  },\r\n  text: {\r\n    active: 'rgba(38, 46, 61, 1)',\r\n    content: 'rgba(38, 46, 61, 0.8)',\r\n    secondary: 'rgba(38, 46, 61, 0.55)',\r\n    disabled: 'rgba(38, 46, 61, 0.3)',\r\n    link: 'rgba(54, 163, 217, 1)',\r\n    accented: 'rgba(12, 14, 18, 1)',\r\n    linkButton: '#1eaff3',\r\n    primary: '#262E3D',\r\n  },\r\n  UI: {\r\n    default: '#6e737d',\r\n    additional: 'rgba(38, 46, 61, 0.4)',\r\n    guiding: 'rgba(38, 46, 61, 0.1)',\r\n  },\r\n  background: {\r\n    workspace: 'rgba(255, 255, 255, 1)',\r\n    supporting: 'rgba(249, 249, 251, 1)',\r\n    priority: 'rgba(244, 244, 248, 1)',\r\n  },\r\n  primary: {\r\n    primary: 'rgba(255, 203, 5, 1)',\r\n    default: '#FFC805',\r\n    hover: '#F2B900',\r\n  },\r\n  interaction: {\r\n    defaultHover: 'rgba(12, 14, 18, 0.07)',\r\n    guidingHover: 'rgba(38, 46, 61, 0.17)',\r\n    linkHovered: 'rgba(50, 147, 197, 1)',\r\n    primaryHovered: 'rgba(242, 185, 0, 1)',\r\n  },\r\n  semantic: {\r\n    info: 'rgba(52, 150, 200, 1)',\r\n    success: 'rgba(34, 195, 195, 1)',\r\n    warning: 'rgba(242, 185, 0, 1)',\r\n    error: 'rgba(231, 71, 39, 1)',\r\n    infoBG: 'rgba(52, 150, 200, 0.1)',\r\n    successBG: 'rgba(34, 195, 195, 0.1)',\r\n    warningBG: 'rgba(242, 185, 0, 0.1)',\r\n    errorBG: 'rgba(231, 71, 39, 0.1)',\r\n  },\r\n  sisenseDark: {\r\n    text: {\r\n      active: 'rgba(235, 239, 247, 1)',\r\n      content: 'rgba(235, 239, 247, 0.8)',\r\n      secondary: 'rgba(235, 239, 247, 0.55)',\r\n      disabled: 'rgba(235, 239, 247, 0.3)',\r\n      link: 'rgba(50, 147, 197, 1)',\r\n      accented: 'rgba(12, 14, 18, 1)',\r\n    },\r\n    ui: {\r\n      default: 'rgba(235, 239, 247, 0.67)',\r\n      additional: 'rgba(235, 239, 247, 0.4)',\r\n      guiding: 'rgba(235, 239, 247, 0.1)',\r\n    },\r\n    background: {\r\n      workspace: 'rgba(12, 14, 18, 1)',\r\n      supporting: 'rgba(249, 249, 251, 1)',\r\n      priority: 'rgba(244, 244, 248, 1)',\r\n    },\r\n    interaction: {\r\n      defaultHover: 'rgba(12, 14, 18, 0.07)',\r\n      guidingHover: 'rgba(235, 239, 247, 0.17)',\r\n      linkHovered: 'rgba(50, 147, 197, 1)',\r\n      primaryHovered: 'rgba(242, 185, 0, 1)',\r\n    },\r\n    semantic: {\r\n      info: 'rgba(52, 150, 200, 1)',\r\n      success: 'rgba(34, 195, 195, 1)',\r\n      warning: 'rgba(242, 185, 0, 1)',\r\n      error: 'rgba(231, 71, 39, 1)',\r\n      infoBG: 'rgba(52, 150, 200, 0.1)',\r\n      successBG: 'rgba(34, 195, 195, 0.1)',\r\n      warningBG: 'rgba(242, 185, 0, 0.1)',\r\n      errorBG: 'rgba(231, 71, 39, 0.1)',\r\n    },\r\n  },\r\n};\r\n","import styled, { CreateStyled } from '@emotion/styled';\r\nimport MuiIconButton, {\r\n  type IconButtonProps as MuiIconButtonProps,\r\n} from '@mui/material/IconButton';\r\n\r\nimport { colors } from '@/themes/colors';\r\n\r\n// https://github.com/emotion-js/emotion/issues/2193#issuecomment-958381691\r\nconst transientOptions: Parameters<CreateStyled>[1] = {\r\n  shouldForwardProp: (propName: string) => !propName.startsWith('$'),\r\n};\r\n\r\ninterface IconButtonProps extends MuiIconButtonProps {\r\n  $hoverColor?: string;\r\n}\r\n\r\nconst IconButton = styled(\r\n  MuiIconButton,\r\n  transientOptions,\r\n)<IconButtonProps>(({ $hoverColor }) => ({\r\n  padding: 2,\r\n  '&.MuiIconButton-root:hover': {\r\n    backgroundColor: $hoverColor ?? colors.interaction.defaultHover,\r\n  },\r\n}));\r\n\r\nexport default IconButton;\r\n","export default function ExpandIcon({ fill = 'rgba(38, 46, 61, 0.67)' }: { fill?: string }) {\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M13.0503 10.2426L17.2929 6H14.5C14.2239 6 14 5.77614 14 5.5C14 5.22386 14.2239 5 14.5 5H18.5C18.7761 5 19 5.22386 19 5.5V9.5C19 9.77614 18.7761 10 18.5 10C18.2239 10 18 9.77614 18 9.5V6.70711L13.7574 10.9497C13.5621 11.145 13.2455 11.145 13.0503 10.9497C12.855 10.7545 12.855 10.4379 13.0503 10.2426ZM10.1464 13.1464L6 17.2929V14.5C6 14.2239 5.77614 14 5.5 14C5.22386 14 5 14.2239 5 14.5V18.5C5 18.7761 5.22386 19 5.5 19H9.5C9.77614 19 10 18.7761 10 18.5C10 18.2239 9.77614 18 9.5 18H6.70711L10.8536 13.8536C11.0488 13.6583 11.0488 13.3417 10.8536 13.1464C10.6583 12.9512 10.3417 12.9512 10.1464 13.1464Z\"\r\n        fill={fill}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","export default function InfoIcon({ fill = 'rgba(38, 46, 61, 0.67)' }: { fill?: string }) {\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M17.25 12C17.25 14.8995 14.8995 17.25 12 17.25C9.10051 17.25 6.75 14.8995 6.75 12C6.75 9.10051 9.10051 6.75 12 6.75C14.8995 6.75 17.25 9.10051 17.25 12ZM18 12C18 15.3137 15.3137 18 12 18C8.68629 18 6 15.3137 6 12C6 8.68629 8.68629 6 12 6C15.3137 6 18 8.68629 18 12ZM11.625 9.375V10.1239H12.375V9.375H11.625ZM12.375 14.6239V10.8739H11.625V14.6239H12.375Z\"\r\n        fill={fill}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","export default function RefreshIcon() {\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M4.64372 12C4.64372 15.3137 7.33002 18 10.6437 18C12.6857 18 14.4894 16.9799 15.5731 15.4216C15.7307 15.195 16.0347 15.1118 16.2737 15.2498C16.5131 15.3879 16.5964 15.6953 16.4413 15.924C15.1825 17.7803 13.0555 19 10.6437 19C6.77773 19 3.64372 15.866 3.64372 12C3.64372 8.13401 6.77773 5 10.6437 5C13.8766 5 16.5977 7.19162 17.4021 10.1702L18.0347 8.56524C18.1359 8.30833 18.4263 8.18215 18.6832 8.2834C18.9401 8.38466 19.0663 8.67501 18.965 8.93192L17.865 11.723C17.7638 11.9799 17.4734 12.1061 17.2165 12.0048L14.4255 10.9048C14.1685 10.8035 14.0424 10.5132 14.1436 10.2563C14.2449 9.99935 14.5352 9.87317 14.7921 9.97442L16.4897 10.6435C15.8749 7.98316 13.4909 6 10.6437 6C7.33002 6 4.64372 8.68629 4.64372 12Z\"\r\n        fill=\"#262E3D\"\r\n        fillOpacity=\"0.67\"\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\r\nimport styled from '@emotion/styled';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { useMemo, useState } from 'react';\r\n\r\nimport { colors } from '../../themes/colors';\r\nimport IconButton from '../common/icon-button';\r\nimport Tooltip from '../common/tooltip';\r\nimport ExpandIcon from '../icons/expand-icon';\r\nimport InfoIcon from '../icons/info-icon';\r\nimport RefreshIcon from '../icons/refresh-icon';\r\nimport ThreeDotsIcon from '../icons/three-dots-icon';\r\nimport { getSlightlyDifferentColor } from '@/utils/color';\r\nimport { CompleteThemeSettings } from '@/index';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst getHoverColor = (themeSettings: CompleteThemeSettings) =>\r\n  getSlightlyDifferentColor(themeSettings.chart.backgroundColor);\r\n\r\nconst InfoTooltip = ({ title }: { title: string }) => {\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <Tooltip title={title}>\r\n      <IconButton disableTouchRipple $hoverColor={getHoverColor(themeSettings)}>\r\n        <InfoIcon fill={themeSettings.chart.textColor} />\r\n      </IconButton>\r\n    </Tooltip>\r\n  );\r\n};\r\n\r\ntype ThreeDotsMenuProps = {\r\n  items: {\r\n    title: string;\r\n    icon?: JSX.Element;\r\n    onClick: () => void;\r\n  }[];\r\n};\r\n\r\nconst ThreeDotsMenu = ({ items }: ThreeDotsMenuProps) => {\r\n  const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\r\n  const handleClick = (event: React.MouseEvent<HTMLElement>) => {\r\n    setAnchorEl(event.currentTarget);\r\n  };\r\n  const handleClose = () => {\r\n    setAnchorEl(null);\r\n  };\r\n\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <>\r\n      <IconButton\r\n        onClick={handleClick}\r\n        $hoverColor={getHoverColor(themeSettings)}\r\n        aria-label=\"three dots button\"\r\n      >\r\n        <ThreeDotsIcon fill={themeSettings.chart.textColor} />\r\n      </IconButton>\r\n      <Menu\r\n        anchorEl={anchorEl}\r\n        anchorOrigin={{\r\n          vertical: 'bottom',\r\n          horizontal: 'center',\r\n        }}\r\n        transformOrigin={{\r\n          vertical: 'top',\r\n          horizontal: 'right',\r\n        }}\r\n        open={Boolean(anchorEl)}\r\n        onClose={handleClose}\r\n      >\r\n        {items.map((item) => (\r\n          <MenuItem\r\n            key={item.title}\r\n            onClick={() => {\r\n              item.onClick();\r\n              handleClose();\r\n            }}\r\n            sx={{\r\n              fontSize: '13px',\r\n              fontFamily: themeSettings.typography.fontFamily,\r\n              color: colors.text.content,\r\n            }}\r\n            disableRipple\r\n          >\r\n            {item.icon}\r\n            <div className=\"csdk-ml-1\">{item.title}</div>\r\n          </MenuItem>\r\n        ))}\r\n      </Menu>\r\n    </>\r\n  );\r\n};\r\n\r\nconst ExpandButton = ({ onClick }: { onClick: () => void }) => {\r\n  const { themeSettings } = useThemeContext();\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <Tooltip title={t('ai.preview')}>\r\n      <IconButton onClick={onClick} $hoverColor={getHoverColor(themeSettings)}>\r\n        <ExpandIcon fill={themeSettings.chart.textColor} />\r\n      </IconButton>\r\n    </Tooltip>\r\n  );\r\n};\r\n\r\nconst ToolbarContainer = styled.div`\r\n  display: flex;\r\n  padding-top: 6px;\r\n  padding-bottom: 6px;\r\n`;\r\n\r\ntype ChartMessageToolbarProps = {\r\n  infoTooltipText?: string;\r\n  onRefresh: () => void;\r\n  onExpand: () => void;\r\n};\r\n\r\nexport default function ChartMessageToolbar({\r\n  infoTooltipText,\r\n  onRefresh,\r\n  onExpand,\r\n}: ChartMessageToolbarProps) {\r\n  const dropdownMenuItems = useMemo(\r\n    (): ThreeDotsMenuProps['items'] => [\r\n      {\r\n        title: 'Refresh',\r\n        onClick: onRefresh,\r\n        icon: <RefreshIcon />,\r\n      },\r\n    ],\r\n    [onRefresh],\r\n  );\r\n\r\n  return (\r\n    <ToolbarContainer aria-label=\"chatbot chart toolbar\">\r\n      <InfoTooltip title={infoTooltipText ?? ''} />\r\n      <ThreeDotsMenu items={dropdownMenuItems} />\r\n      <ExpandButton onClick={onExpand} />\r\n    </ToolbarContainer>\r\n  );\r\n}\r\n","import Dialog from '@mui/material/Dialog';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { useMemo, useState } from 'react';\r\nimport { WidgetContainerStyleOptions } from '../../types';\r\nimport { ChartWidget } from '../../widgets/chart-widget';\r\nimport { NlqResponseData } from '../api/types';\r\nimport CloseDialogIcon from '../icons/close-dialog-icon';\r\nimport ChartMessageToolbar from './chart-message-toolbar';\r\nimport { widgetComposer } from '@/analytics-composer';\r\nimport { isChartWidgetProps } from '@/widget-by-id/utils';\r\nimport { TranslatableError } from '@/translation/translatable-error';\r\nimport { isTable } from '@/chart-options-processor/translations/types';\r\nimport { useThemeContext } from '@/theme-provider';\r\n\r\ntype ChartMessageProps = {\r\n  content: NlqResponseData;\r\n};\r\n\r\nexport default function ChartMessage({ content }: ChartMessageProps) {\r\n  const [expanded, setExpanded] = useState(false);\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  const { inlineElement, expandedElement } = useMemo(() => {\r\n    // Chart in expanded view uses custom style options, inline chart (message) will remove some options later in the code\r\n    // Currently the REST API does not return widgetProps or store them in chat history .. if it does in future, should use it directly as content.widgetProps\r\n    const widgetProps = widgetComposer.toWidgetProps(content, { useCustomizedStyleOptions: true });\r\n    if (widgetProps === undefined || !isChartWidgetProps(widgetProps)) {\r\n      throw new TranslatableError('errors.otherWidgetTypesNotSupported');\r\n    }\r\n\r\n    const { detailedDescription } = content;\r\n    const { styleOptions } = widgetProps;\r\n\r\n    const widgetStyleOptions: WidgetContainerStyleOptions = {\r\n      cornerRadius: 'Small',\r\n      header: {\r\n        renderToolbar: (onRefresh) => (\r\n          <ChartMessageToolbar\r\n            infoTooltipText={detailedDescription}\r\n            onRefresh={onRefresh}\r\n            onExpand={() => setExpanded(true)}\r\n          />\r\n        ),\r\n      },\r\n    };\r\n\r\n    let inlineElement: JSX.Element;\r\n    let expandedElement: JSX.Element;\r\n    if (isTable(widgetProps.chartType)) {\r\n      inlineElement = (\r\n        <div className=\"csdk-h-[245px]\">\r\n          <ChartWidget {...widgetProps} styleOptions={widgetStyleOptions} />\r\n        </div>\r\n      );\r\n      expandedElement = (\r\n        <ChartWidget {...widgetProps} styleOptions={{ header: { hidden: true } }} />\r\n      );\r\n    } else {\r\n      const expandedStyleOptions = {\r\n        ...styleOptions,\r\n        header: { hidden: true },\r\n      };\r\n\r\n      // inline style options do not include legend, yAxis, xAxis\r\n      const inlineStyleOptions = {\r\n        ...styleOptions,\r\n        legend: undefined,\r\n        xAxis: undefined,\r\n        yAxis: undefined,\r\n        ...widgetStyleOptions,\r\n      };\r\n\r\n      delete inlineStyleOptions.legend;\r\n      delete inlineStyleOptions.xAxis;\r\n      delete inlineStyleOptions.yAxis;\r\n\r\n      inlineElement = (\r\n        <div>\r\n          <ChartWidget {...widgetProps} styleOptions={inlineStyleOptions} />\r\n        </div>\r\n      );\r\n\r\n      expandedElement = (\r\n        <ChartWidget\r\n          {...widgetProps}\r\n          styleOptions={{ cornerRadius: 'None', ...expandedStyleOptions }}\r\n        />\r\n      );\r\n    }\r\n    return { inlineElement, expandedElement };\r\n  }, [content]);\r\n\r\n  return (\r\n    <>\r\n      {inlineElement}\r\n      <Dialog\r\n        open={expanded}\r\n        onClose={() => setExpanded(false)}\r\n        maxWidth=\"xl\"\r\n        fullWidth\r\n        PaperProps={{\r\n          sx: {\r\n            backgroundColor: themeSettings.chart.backgroundColor,\r\n            color: themeSettings.aiChat.primaryTextColor,\r\n          },\r\n        }}\r\n      >\r\n        <div className=\"csdk-flex csdk-items-center csdk-justify-between csdk-mt-[16px] csdk-mx-[16px] csdk-pl-[20px]\">\r\n          <div className=\"csdk-text-ai-lg csdk-semibold\">{content.queryTitle}</div>\r\n          <IconButton onClick={() => setExpanded(false)} aria-label=\"close expanded chart\">\r\n            <CloseDialogIcon fillColor={themeSettings.aiChat.primaryTextColor} />\r\n          </IconButton>\r\n        </div>\r\n        <div className=\"csdk-h-screen csdk-mt-[8px] csdk-mb-[24px] csdk-mx-[16px]\">\r\n          {expandedElement}\r\n        </div>\r\n      </Dialog>\r\n    </>\r\n  );\r\n}\r\n","import { Themable } from '@/theme-provider/types';\r\n\r\nexport default function ThumbsDownIcon({ theme }: Themable) {\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M18.5798 9.61098C18.8749 9.98744 19.0165 10.391 18.9985 10.8066C18.9804 11.2643 18.7757 11.6227 18.607 11.8426C18.8027 12.3305 18.878 13.0984 18.2245 13.6947C17.7456 14.1315 16.9325 14.3273 15.806 14.2732C15.014 14.237 14.3513 14.0893 14.3243 14.0833H14.3213C14.1708 14.0562 14.011 14.0231 13.8484 13.9869C13.8363 14.1797 13.8696 14.6585 14.2249 15.7367C14.6465 17.0196 14.6225 18.0016 14.1466 18.6581C13.6466 19.3478 12.8485 19.4019 12.6136 19.4019C12.3877 19.4019 12.1799 19.3086 12.0324 19.137C11.6981 18.7484 11.7373 18.0317 11.7793 17.7004C11.3818 16.6342 10.2676 14.02 9.32479 13.2943C9.30668 13.2822 9.2917 13.2671 9.27671 13.2521C8.99949 12.9599 8.81287 12.6437 8.68642 12.3667C8.50861 12.463 8.30687 12.5173 8.08995 12.5173H6.25291C5.56014 12.5173 5 11.954 5 11.2643L5 6.37029C5 5.67764 5.56323 5.11738 6.25291 5.11738H8.08995C8.35803 5.11738 8.60804 5.20179 8.81287 5.34635L9.52051 5.26191C9.62905 5.24692 11.5565 5.00297 13.5352 5.04209C13.8935 5.01502 14.2309 5 14.5441 5C15.0832 5 15.5531 5.04209 15.9445 5.12649C16.8661 5.32222 17.4957 5.71366 17.8148 6.28898C18.0588 6.72865 18.0588 7.16543 18.0197 7.44247C18.6191 7.98454 18.7244 8.58394 18.7033 9.00555C18.6913 9.2495 18.637 9.4573 18.5798 9.61098ZM6.25291 5.93058C6.00896 5.93058 5.81324 6.12939 5.81324 6.37029V11.2674C5.81324 11.5112 6.0119 11.7071 6.25291 11.7071H8.08995C8.33393 11.7071 8.52981 11.5083 8.52981 11.2674V6.37338C8.52981 6.12939 8.33096 5.93352 8.08995 5.93352H6.25291V5.93058ZM17.8088 9.96331C17.6823 9.83083 17.6582 9.6289 17.7547 9.47229C17.7547 9.46935 17.878 9.25849 17.8932 8.96937C17.9142 8.5748 17.7245 8.22555 17.327 7.92731C17.1854 7.81893 17.1282 7.63217 17.1885 7.46351C17.1885 7.46057 17.3179 7.06291 17.1072 6.68645C16.9052 6.32516 16.4566 6.06619 15.7759 5.92162C15.2309 5.80413 14.4899 5.78293 13.5805 5.85529H13.5383C11.6017 5.81309 9.64403 6.06619 9.62302 6.06912H9.61994L9.31583 6.1053C9.3339 6.18955 9.34286 6.27998 9.34286 6.37029V11.2674C9.34286 11.3968 9.32185 11.5233 9.28567 11.6408C9.33992 11.8425 9.49051 12.2914 9.84582 12.6739C11.1982 13.7461 12.5203 17.3631 12.5775 17.5197C12.6017 17.583 12.6075 17.6521 12.5956 17.7214C12.5443 18.0587 12.5624 18.4715 12.6347 18.5949C12.7943 18.5919 13.225 18.5467 13.484 18.1883C13.7912 17.7636 13.7791 17.0046 13.4478 15.9988C12.9419 14.4657 12.8997 13.6587 13.3003 13.3033C13.4991 13.1256 13.7641 13.1165 13.9569 13.1858C14.1406 13.228 14.3153 13.2641 14.4809 13.2912C14.4929 13.2943 14.508 13.2973 14.52 13.3003C15.4447 13.5021 17.1011 13.6255 17.6763 13.1015C18.1642 12.6558 17.8179 12.0655 17.7788 12.0022C17.6673 11.8336 17.7004 11.6137 17.851 11.4782C17.854 11.4752 18.1702 11.177 18.1852 10.7764C18.1973 10.5085 18.0708 10.2343 17.8088 9.96331Z\"\r\n        fill={theme.aiChat.icons.color}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import ThumbsDownIcon from '@/ai/icons/thumbs-down-icon';\r\nimport Tooltip from '@/ai/common/tooltip';\r\nimport { useThemeContext } from '@/theme-provider/theme-context';\r\nimport IconButton from '@/ai/common/icon-button';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype ThumbsDownButtonProps = {\r\n  onClick?: () => void;\r\n  disabled?: boolean;\r\n};\r\n\r\nexport default function ThumbsDownButton({ onClick, disabled }: ThumbsDownButtonProps) {\r\n  const { themeSettings } = useThemeContext();\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <Tooltip title={t('ai.buttons.incorrectResponse')}>\r\n      <IconButton\r\n        aria-label=\"thumbs-down\"\r\n        onClick={onClick}\r\n        $hoverColor={themeSettings.aiChat.icons.feedbackIcons.hoverColor}\r\n        disabled={disabled}\r\n      >\r\n        <ThumbsDownIcon theme={themeSettings} />\r\n      </IconButton>\r\n    </Tooltip>\r\n  );\r\n}\r\n","import { Themable } from '@/theme-provider/types';\r\n\r\nexport default function ThumbsUpIcon({ theme }: Themable) {\r\n  return (\r\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M18.5798 14.7911C18.8749 14.4146 19.0165 14.011 18.9985 13.5954C18.9804 13.1377 18.7757 12.7793 18.607 12.5595C18.8027 12.0715 18.878 11.3036 18.2245 10.7073C17.7456 10.2705 16.9325 10.0748 15.806 10.1289C15.014 10.1651 14.3513 10.3127 14.3243 10.3187H14.3213C14.1708 10.3458 14.011 10.3789 13.8484 10.4151C13.8363 10.2223 13.8696 9.74345 14.2248 8.66522C14.6465 7.38231 14.6225 6.40041 14.1466 5.74397C13.6466 5.05425 12.8485 5 12.6136 5C12.3877 5 12.1799 5.09336 12.0324 5.26499C11.6981 5.6535 11.7373 6.37026 11.7793 6.70158C11.3818 7.76777 10.2676 10.382 9.32479 11.1077C9.30668 11.1198 9.2917 11.1349 9.27671 11.1499C8.99949 11.4421 8.81287 11.7583 8.68642 12.0353C8.50861 11.939 8.30687 11.8848 8.08995 11.8848H6.25291C5.56014 11.8848 5 12.448 5 13.1377V18.0318C5 18.7244 5.56323 19.2847 6.25291 19.2847H8.08995C8.35803 19.2847 8.60804 19.2003 8.81287 19.0557L9.52051 19.1401C9.62905 19.1551 11.5565 19.3991 13.5352 19.36C13.8935 19.387 14.2309 19.402 14.5441 19.402C15.0832 19.402 15.5531 19.36 15.9445 19.2756C16.8661 19.0798 17.4957 18.6884 17.8148 18.1131C18.0588 17.6734 18.0588 17.2366 18.0197 16.9596C18.6191 16.4175 18.7244 15.8181 18.7033 15.3965C18.6913 15.1525 18.637 14.9447 18.5798 14.7911ZM6.25291 18.4715C6.00896 18.4715 5.81324 18.2727 5.81324 18.0318V13.1346C5.81324 12.8908 6.0119 12.6949 6.25291 12.6949H8.08995C8.33393 12.6949 8.52981 12.8937 8.52981 13.1346V18.0287C8.52981 18.2727 8.33096 18.4685 8.08995 18.4685H6.25291V18.4715ZM17.8088 14.4387C17.6823 14.5712 17.6582 14.7731 17.7547 14.9298C17.7547 14.9327 17.878 15.1436 17.8932 15.4327C17.9142 15.8272 17.7245 16.1765 17.327 16.4747C17.1854 16.5831 17.1282 16.7699 17.1885 16.9385C17.1885 16.9415 17.3179 17.3391 17.1072 17.7156C16.9052 18.0769 16.4566 18.3359 15.7759 18.4804C15.2309 18.5979 14.4898 18.6191 13.5805 18.5468H13.5383C11.6017 18.589 9.64403 18.3359 9.62302 18.3329H9.61994L9.31583 18.2967C9.3339 18.2125 9.34286 18.1221 9.34286 18.0318V13.1346C9.34286 13.0052 9.32185 12.8787 9.28567 12.7612C9.33992 12.5595 9.49051 12.1106 9.84582 11.7281C11.1981 10.6559 12.5203 7.03893 12.5775 6.88232C12.6016 6.81908 12.6075 6.74981 12.5956 6.68058C12.5443 6.34323 12.5624 5.93058 12.6347 5.80718C12.7943 5.81015 13.225 5.85529 13.484 6.21365C13.7912 6.63837 13.7791 7.39733 13.4478 8.40316C12.9419 9.93624 12.8997 10.7433 13.3003 11.0987C13.4991 11.2764 13.7641 11.2855 13.9569 11.2162C14.1406 11.174 14.3153 11.1378 14.4809 11.1108C14.4929 11.1077 14.508 11.1048 14.52 11.1017C15.4447 10.8999 17.1011 10.7765 17.6763 11.3005C18.1642 11.7462 17.8179 12.3365 17.7788 12.3998C17.6673 12.5684 17.7004 12.7883 17.851 12.9238C17.854 12.9268 18.1702 13.225 18.1852 13.6256C18.1973 13.8935 18.0708 14.1677 17.8088 14.4387Z\"\r\n        fill={theme.aiChat.icons.color}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import ThumbsUpIcon from '@/ai/icons/thumbs-up-icon';\r\nimport Tooltip from '@/ai/common/tooltip';\r\nimport { useThemeContext } from '@/theme-provider/theme-context';\r\nimport IconButton from '@/ai/common/icon-button';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype ThumbsUpButtonProps = {\r\n  onClick?: () => void;\r\n  disabled?: boolean;\r\n};\r\n\r\nexport default function ThumbsUpButton({ onClick, disabled }: ThumbsUpButtonProps) {\r\n  const { themeSettings } = useThemeContext();\r\n  const { t } = useTranslation();\r\n  return (\r\n    <Tooltip title={t('ai.buttons.correctResponse')}>\r\n      <IconButton\r\n        aria-label=\"thumbs-up\"\r\n        onClick={onClick}\r\n        $hoverColor={themeSettings.aiChat.icons.feedbackIcons.hoverColor}\r\n        disabled={disabled}\r\n      >\r\n        <ThumbsUpIcon theme={themeSettings} />\r\n      </IconButton>\r\n    </Tooltip>\r\n  );\r\n}\r\n","import { Ref, useCallback, useRef, useState } from 'react';\r\n\r\n/**\r\n * Track whether an element is being hovered over.\r\n *\r\n * @privateRemarks Derived from https://github.com/uidotdev/usehooks/blob/dfa6623fcc2dcad3b466def4e0495b3f38af962b/index.js#L426.\r\n * @internal\r\n */\r\nexport const useHover = <T extends HTMLElement>(): [Ref<T>, boolean] => {\r\n  const [hovering, setHovering] = useState(false);\r\n  const previousNode = useRef<T | null>(null);\r\n\r\n  const handleMouseEnter = useCallback(() => {\r\n    setHovering(true);\r\n  }, []);\r\n\r\n  const handleMouseLeave = useCallback(() => {\r\n    setHovering(false);\r\n  }, []);\r\n\r\n  const customRef = useCallback(\r\n    (node: T) => {\r\n      if (previousNode.current?.nodeType === Node.ELEMENT_NODE) {\r\n        previousNode.current.removeEventListener('mouseenter', handleMouseEnter);\r\n        previousNode.current.removeEventListener('mouseleave', handleMouseLeave);\r\n      }\r\n\r\n      if (node?.nodeType === Node.ELEMENT_NODE) {\r\n        node.addEventListener('mouseenter', handleMouseEnter);\r\n        node.addEventListener('mouseleave', handleMouseLeave);\r\n      }\r\n\r\n      previousNode.current = node;\r\n    },\r\n    [handleMouseEnter, handleMouseLeave],\r\n  );\r\n\r\n  return [customRef, hovering];\r\n};\r\n","import debounce from 'lodash-es/debounce';\r\nimport { ReactNode, useCallback, useMemo, useState } from 'react';\r\n\r\nimport { useChatApi } from '@/ai/api/chat-api-provider';\r\nimport ThumbsDownButton from '@/ai/buttons/thumbs-down-button';\r\nimport ThumbsUpButton from '@/ai/buttons/thumbs-up-button';\r\nimport { useHover } from '@/common/hooks/use-hover';\r\nimport { useThemeContext } from '@/theme-provider/theme-context';\r\nimport styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\n\r\nconst Container = styled.div<Themable>`\r\n  display: flex;\r\n  flex-direction: column;\r\n  row-gap: ${({ theme }) => theme.aiChat.body.gapBetweenMessages};\r\n`;\r\n\r\nfunction FeedbackRow({ visible, onSend }: { visible: boolean; onSend: (rating: -1 | 1) => void }) {\r\n  const [clicked, setClicked] = useState(false);\r\n\r\n  const onClick = useCallback(\r\n    (type: 'up' | 'down') => {\r\n      setClicked(true);\r\n\r\n      onSend(type === 'up' ? 1 : -1);\r\n    },\r\n    [onSend],\r\n  );\r\n\r\n  const styles = `csdk-transition-opacity csdk-delay-150 csdk-duration-500 ${\r\n    clicked ? 'csdk-opacity-0' : 'csdk-opacity-100'\r\n  }`;\r\n\r\n  if (!visible) {\r\n    return null;\r\n  }\r\n\r\n  return (\r\n    <div className={`csdk-flex csdk-items-center ${styles}`}>\r\n      <ThumbsUpButton onClick={() => onClick('up')} disabled={clicked} />\r\n      <ThumbsDownButton onClick={() => onClick('down')} disabled={clicked} />\r\n    </div>\r\n  );\r\n}\r\n\r\ntype FeedbackWrapperProps = {\r\n  sourceId: string;\r\n  data: object;\r\n  type: string;\r\n  buttonVisibility?: 'onHover' | 'always' | 'never';\r\n  renderContent: (buttonRow: JSX.Element) => ReactNode;\r\n};\r\n\r\nexport default function FeedbackWrapper({\r\n  sourceId,\r\n  data,\r\n  type,\r\n  buttonVisibility = 'onHover',\r\n  renderContent,\r\n}: FeedbackWrapperProps) {\r\n  const api = useChatApi();\r\n  const sendFeedback = debounce(\r\n    useCallback(\r\n      (rating: -1 | 1) => {\r\n        if (!api) {\r\n          return;\r\n        }\r\n\r\n        api.ai.sendFeedback({\r\n          sourceId,\r\n          type,\r\n          data,\r\n          rating,\r\n        });\r\n      },\r\n      [api, sourceId, data, type],\r\n    ),\r\n    200,\r\n  );\r\n\r\n  const [ref, hovering] = useHover<HTMLDivElement>();\r\n\r\n  const areButtonsVisible = useMemo(() => {\r\n    if (buttonVisibility === 'onHover') {\r\n      return hovering;\r\n    } else if (buttonVisibility === 'never') {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }, [hovering, buttonVisibility]);\r\n\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <Container ref={ref} theme={themeSettings}>\r\n      {renderContent(<FeedbackRow onSend={sendFeedback} visible={areButtonsVisible} />)}\r\n    </Container>\r\n  );\r\n}\r\n","import { useLayoutEffect, useRef, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype CollapsibleProps = {\r\n  text: string;\r\n};\r\n\r\n// line height * number of rows\r\nconst MAX_HEIGHT_PX = 18 * 5;\r\n\r\n/**\r\n * Text container with an expand/collapse button for text over the character limit.\r\n *\r\n * @internal\r\n */\r\nexport default function Collapsible({ text }: CollapsibleProps) {\r\n  const [collapsed, setCollapsed] = useState(true);\r\n  const [showReadMore, setShowReadMore] = useState(false);\r\n\r\n  const { t } = useTranslation();\r\n\r\n  const ref = useRef<HTMLDivElement>(null);\r\n\r\n  useLayoutEffect(() => {\r\n    if (ref.current && ref.current.scrollHeight > MAX_HEIGHT_PX) {\r\n      setShowReadMore(true);\r\n    }\r\n  }, [text]);\r\n\r\n  return (\r\n    <div>\r\n      <div ref={ref} className={`${collapsed ? 'csdk-line-clamp-5' : ''} csdk-whitespace-pre-wrap`}>\r\n        {text}\r\n      </div>\r\n      {showReadMore && (\r\n        <div className=\"csdk-mt-3 csdk-flex csdk-justify-end\">\r\n          <div\r\n            className=\"csdk-text-ai-xs csdk-text-text-link csdk-cursor-pointer\"\r\n            onClick={() => setCollapsed((v) => !v)}\r\n          >\r\n            {collapsed ? t('ai.buttons.readMore') : t('ai.buttons.collapse')}\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n","import { GetNlgInsightsRequest } from '../api/types';\r\nimport LoadingDotsIcon from '../icons/loading-dots-icon';\r\nimport TextMessage from './text-message';\r\nimport { useGetNlgInsightsInternal } from '../use-get-nlg-insights';\r\nimport Collapsible from '../common/collapsible';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype InsightsMessageProps = {\r\n  nlgRequest: GetNlgInsightsRequest;\r\n};\r\n\r\nexport default function InsightsMessage({ nlgRequest }: InsightsMessageProps) {\r\n  const { data, isLoading, isError } = useGetNlgInsightsInternal(nlgRequest);\r\n  const { t } = useTranslation();\r\n\r\n  if (isLoading) {\r\n    return <LoadingDotsIcon />;\r\n  }\r\n\r\n  if (isError) {\r\n    return <TextMessage align=\"left\">{t('ai.errors.unexpected')}</TextMessage>;\r\n  }\r\n\r\n  return (\r\n    <TextMessage align=\"full\">\r\n      <Collapsible text={data ?? t('ai.errors.insightsNotAvailable')} />\r\n    </TextMessage>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\r\n\r\nexport default function LightBulbIcon() {\r\n  const { themeSettings } = useThemeContext();\r\n  return (\r\n    <svg width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M11.5 3.5C11.2239 3.5 11 3.72386 11 4V5C11 5.27614 11.2239 5.5 11.5 5.5C11.7761 5.5 12 5.27614 12 5V4C12 3.72386 11.7761 3.5 11.5 3.5ZM20 11C20 10.7239 19.7761 10.5 19.5 10.5H18.5C18.2239 10.5 18 10.7239 18 11C18 11.2761 18.2239 11.5 18.5 11.5H19.5C19.7761 11.5 20 11.2761 20 11ZM6.06066 5.35355C5.8654 5.15829 5.54882 5.15829 5.35355 5.35355C5.15829 5.54882 5.15829 5.8654 5.35355 6.06066L6.06066 6.76777C6.25592 6.96303 6.5725 6.96303 6.76777 6.76777C6.96303 6.5725 6.96303 6.25592 6.76777 6.06066L6.06066 5.35355ZM5 11C5 10.7239 4.77614 10.5 4.5 10.5H3.5C3.22386 10.5 3 10.7239 3 11C3 11.2761 3.22386 11.5 3.5 11.5H4.5C4.77614 11.5 5 11.2761 5 11ZM17.7678 6.06066C17.963 5.8654 17.963 5.54882 17.7678 5.35355C17.5725 5.15829 17.2559 5.15829 17.0607 5.35355L16.3536 6.06066C16.1583 6.25592 16.1583 6.5725 16.3536 6.76777C16.5488 6.96303 16.8654 6.96303 17.0607 6.76777L17.7678 6.06066ZM12.1443 6.53487C14.6635 6.81824 16.6511 8.67684 16.9597 11.0379C17.1678 12.6385 16.5623 14.2379 15.3244 15.3575C14.5049 16.1022 14.0038 17.2023 14 18.2722V19.5H9V18.2753C8.98626 17.1847 8.46545 16.0683 7.62521 15.3139C6.04513 13.8436 5.56667 11.6251 6.41329 9.69484C7.25992 7.76454 9.26456 6.50321 11.4909 6.5C11.7093 6.50004 11.9274 6.51167 12.1443 6.53487ZM11.4927 7.5C9.675 7.50258 8.03521 8.51877 7.34062 10.0785C6.64391 11.643 7.03778 13.4417 8.32278 14.6196C9.36662 15.5426 9.98356 16.8913 10.0003 18.2029V18.5H13.0001L13.0001 18.1969C13.0048 16.9143 13.6014 15.5805 14.6246 14.6649C15.6402 13.7602 16.1379 12.4652 15.9669 11.1689C15.7132 9.25779 14.0849 7.75729 12.0264 7.52799C11.8487 7.50938 11.67 7.50004 11.4927 7.5ZM14.1068 12.5099H13.1068C13.1068 10.7222 12.3371 9.95246 10.6235 10.0096L10.5901 9.01014C12.8765 8.93393 14.1068 10.1642 14.1068 12.5099ZM13 21.5V20.5H10V21.5H13Z\"\r\n        fill={themeSettings.aiChat.icons.color}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import { useTranslation } from 'react-i18next';\r\nimport LightBulbIcon from '../icons/light-bulb-icon';\r\nimport ClickableMessage from '../messages/clickable-message';\r\n\r\nexport default function InsightsButton({ onClick }: { onClick?: () => void }) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <ClickableMessage align=\"left\" onClick={onClick}>\r\n      <div\r\n        className={`csdk-py-[5px] csdk-px-2 csdk-flex csdk-items-center csdk-gap-x-1 csdk-select-none`}\r\n      >\r\n        <LightBulbIcon />\r\n        {t('ai.buttons.insights')}\r\n      </div>\r\n    </ClickableMessage>\r\n  );\r\n}\r\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\nvar lowerFirst = createCaseFirst('toLowerCase');\n\nexport default lowerFirst;\n","/* eslint-disable complexity */\r\nimport { useCallback, useState } from 'react';\r\nimport { GetNlgInsightsRequest, NlqResponseData } from '../api/types';\r\nimport { useChatConfig } from '../chat-config';\r\nimport ChartMessage from './chart-message';\r\nimport FeedbackWrapper from './feedback-wrapper';\r\nimport InsightsMessage from './insights-message';\r\nimport InsightsButton from '../buttons/insights-button';\r\nimport { MessageContainer } from './text-message';\r\nimport styled from '@emotion/styled';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport lowerFirst from 'lodash-es/lowerFirst';\r\n\r\nconst FlexRow = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  column-gap: 10px;\r\n`;\r\n\r\nconst startsWithVowel = (s: string | null | undefined): boolean => !!s && 'aeiou'.includes(s[0]);\r\n\r\ninterface NlqMessageGroupProps {\r\n  data: NlqResponseData;\r\n  alwaysShowFeedback?: boolean;\r\n}\r\n\r\n/**\r\n * Renders a NLQ response as a series of chat messages/buttons.\r\n *\r\n * @internal\r\n */\r\nexport default function NlqMessageGroup({ data, alwaysShowFeedback }: NlqMessageGroupProps) {\r\n  const { chatMode = 'analyze', enableInsights } = useChatConfig();\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  const { queryTitle, chartRecommendations, jaql, userMsg, clarification = '' } = data;\r\n  console.debug(`JAQL for ${queryTitle}`, jaql);\r\n  console.debug(`chart recommendations for ${queryTitle}`, chartRecommendations);\r\n\r\n  const chartType = 'chartType' in chartRecommendations ? chartRecommendations.chartType : 'table';\r\n  let chartTypeSegment: string;\r\n  if (startsWithVowel(chartType)) {\r\n    chartTypeSegment = `an ${chartType}`;\r\n  } else {\r\n    chartTypeSegment = `a ${chartType}`;\r\n  }\r\n  if (chartType !== 'table') {\r\n    chartTypeSegment += ' chart';\r\n  }\r\n\r\n  const dataSourceTitle = jaql.datasource.title;\r\n\r\n  const [showInsights, setShowInsights] = useState(false);\r\n\r\n  const onInsightsButtonClick = useCallback(() => {\r\n    setShowInsights((prev) => !prev);\r\n  }, []);\r\n\r\n  const nlgRequest: GetNlgInsightsRequest = {\r\n    jaql: {\r\n      datasource: jaql.datasource,\r\n      metadata: jaql.metadata,\r\n    },\r\n  };\r\n\r\n  const isAnalyzeMode = chatMode === 'analyze';\r\n\r\n  const answer = `${userMsg}${userMsg && clarification ? '\\n' : ''}${clarification}`;\r\n\r\n  return (\r\n    <>\r\n      <FeedbackWrapper\r\n        sourceId={dataSourceTitle}\r\n        data={data}\r\n        type=\"chats/nlq\"\r\n        buttonVisibility={alwaysShowFeedback ? 'always' : 'onHover'}\r\n        renderContent={(buttonRow) => (\r\n          <>\r\n            <FlexRow>\r\n              <MessageContainer align=\"left\" theme={themeSettings}>\r\n                {answer || `Here's ${chartTypeSegment} showing ${lowerFirst(queryTitle)}.`}\r\n              </MessageContainer>\r\n              {buttonRow}\r\n            </FlexRow>\r\n            {isAnalyzeMode && <ChartMessage content={data} />}\r\n          </>\r\n        )}\r\n      />\r\n      {enableInsights && (\r\n        <FeedbackWrapper\r\n          sourceId={dataSourceTitle}\r\n          data={nlgRequest}\r\n          type=\"nlg/queryResult\"\r\n          buttonVisibility={showInsights ? 'onHover' : 'never'}\r\n          renderContent={(buttonRow) => (\r\n            <>\r\n              <FlexRow>\r\n                <InsightsButton onClick={onInsightsButtonClick} />\r\n                {buttonRow}\r\n              </FlexRow>\r\n              {showInsights && <InsightsMessage nlgRequest={nlgRequest} />}\r\n            </>\r\n          )}\r\n        />\r\n      )}\r\n    </>\r\n  );\r\n}\r\n","import { memo } from 'react';\r\n\r\nimport { ChatMessage, NlqResponseData } from '../api/types';\r\nimport { isNlqMessage, isTextMessage } from '../use-chat-session';\r\nimport NlqMessageGroup from './nlq-message-group';\r\nimport TextMessage from './text-message';\r\n\r\ntype MessageResolverProps = {\r\n  message: ChatMessage;\r\n  isLastMessage?: boolean;\r\n};\r\n\r\nfunction MessageResolver({ message, isLastMessage }: MessageResolverProps) {\r\n  if (isNlqMessage(message)) {\r\n    const nlqResponse = JSON.parse(message.content) as NlqResponseData;\r\n\r\n    return <NlqMessageGroup data={nlqResponse} alwaysShowFeedback={isLastMessage} />;\r\n  }\r\n\r\n  const content = isTextMessage(message) ? JSON.parse(message.content).answer : message.content;\r\n\r\n  return <TextMessage align={message.role === 'user' ? 'right' : 'left'}>{content}</TextMessage>;\r\n}\r\n\r\nexport default memo(MessageResolver);\r\n","import { ErrorBoundary, FallbackProps } from 'react-error-boundary';\r\n\r\nimport { ChatMessage } from '../api/types';\r\nimport MessageResolver from './message-resolver';\r\nimport TextMessage from './text-message';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst unexpectedErrorHandler = ({\r\n  error,\r\n  displayMessage,\r\n}: FallbackProps & { displayMessage: string }) => {\r\n  console.debug('Unexpected error occurred when resolving a chat message:', error);\r\n  return <TextMessage align=\"left\">{displayMessage}</TextMessage>;\r\n};\r\n\r\nexport type MessageListResolverProps = {\r\n  messages: ChatMessage[];\r\n};\r\n\r\nexport default function MessageListResolver({ messages }: MessageListResolverProps) {\r\n  const { t } = useTranslation();\r\n  return (\r\n    <>\r\n      {messages.map((msg, i) => (\r\n        <ErrorBoundary\r\n          key={i}\r\n          fallbackRender={(props) =>\r\n            unexpectedErrorHandler({\r\n              ...props,\r\n              displayMessage: t('ai.errors.unexpected'),\r\n            })\r\n          }\r\n        >\r\n          <MessageResolver key={i} message={msg} isLastMessage={i === messages.length - 1} />\r\n        </ErrorBoundary>\r\n      ))}\r\n    </>\r\n  );\r\n}\r\n","type Colorable = {\r\n  color: string;\r\n};\r\n\r\nexport default function ArrowLeftIcon({ color }: Colorable) {\r\n  return (\r\n    <svg\r\n      width=\"100%\"\r\n      height=\"100%\"\r\n      viewBox=\"0 0 4 8\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M3.87815 0.825307C4.05781 0.615598 4.03345 0.299954 3.82374 0.120297C3.61403 -0.05936 3.29838 -0.034998 3.11873 0.174711L0.120288 3.67471C-0.040096 3.86192 -0.040096 4.1381 0.120288 4.32531L3.11873 7.82531C3.29838 8.03502 3.61403 8.05938 3.82374 7.87972C4.03345 7.70006 4.05781 7.38442 3.87815 7.17471L1.15839 4.00001L3.87815 0.825307Z\"\r\n        fill={color}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import ArrowLeftIcon from './icons/arrow-left-icon';\r\n\r\ntype Colorable = {\r\n  color: string;\r\n};\r\n\r\ntype Clickable = {\r\n  onClick: () => void;\r\n};\r\n\r\nexport default function NavBackButton({ onClick, color }: Clickable & Colorable) {\r\n  const sizeStyle = 'csdk-w-5 csdk-h-5';\r\n  const layoutStyle = 'csdk-flex csdk-p-[4px] csdk-ml-[6px]';\r\n  const interactionStyle = 'csdk-cursor-pointer';\r\n\r\n  return (\r\n    <div\r\n      aria-label=\"go back\"\r\n      className={`${sizeStyle} ${layoutStyle} ${interactionStyle}`}\r\n      onClick={onClick}\r\n    >\r\n      <ArrowLeftIcon color={color} />\r\n    </div>\r\n  );\r\n}\r\n","import styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport { css } from '@emotion/react';\r\n\r\nconst Button = styled.button<Themable>`\r\n  font-size: inherit;\r\n  line-height: inherit;\r\n  box-sizing: border-box;\r\n  border-width: 1px;\r\n  padding-left: 1rem;\r\n  padding-right: 1rem;\r\n  padding-top: 0.5rem;\r\n  padding-bottom: 0.5rem;\r\n  cursor: pointer;\r\n  text-align: left;\r\n  max-width: 85%;\r\n\r\n  font-family: ${({ theme }) => theme.typography.fontFamily};\r\n  color: ${({ theme }) => theme.aiChat.suggestions.textColor};\r\n  background-color: ${({ theme }) => theme.aiChat.suggestions.backgroundColor};\r\n  border: ${({ theme }) => theme.aiChat.suggestions.border};\r\n  border-radius: ${({ theme }) => theme.aiChat.suggestions.borderRadius};\r\n  &:hover {\r\n    background-color: ${({ theme }) => theme.aiChat.suggestions.hover.backgroundColor};\r\n    color: ${({ theme }) => theme.aiChat.suggestions.hover.textColor};\r\n  }\r\n\r\n  ${({ theme }) => {\r\n    const { borderGradient, borderRadius } = theme.aiChat.suggestions;\r\n    if (borderGradient) {\r\n      const [firstColor, secondColor] = borderGradient;\r\n      return css`\r\n        border: none;\r\n        position: relative;\r\n        border-radius: ${borderRadius};\r\n        &:before {\r\n          content: '';\r\n          position: absolute;\r\n          top: 0;\r\n          left: 0;\r\n          right: 0;\r\n          bottom: 0;\r\n          border-radius: ${borderRadius};\r\n          border: 1px solid transparent;\r\n          background: linear-gradient(30deg, ${firstColor}, ${secondColor}) border-box;\r\n          -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0);\r\n          -webkit-mask-composite: destination-out;\r\n          mask-composite: exclude;\r\n        }\r\n      `;\r\n    }\r\n    return '';\r\n  }}\r\n`;\r\n\r\nexport interface SuggestedItemProps {\r\n  question: string;\r\n  onClick: () => void;\r\n}\r\n\r\nexport default function SuggestionItem({ question, onClick }: SuggestedItemProps) {\r\n  const { themeSettings } = useThemeContext();\r\n  return (\r\n    <Button onClick={onClick} theme={themeSettings}>\r\n      {question}\r\n    </Button>\r\n  );\r\n}\r\n","import { useMemo, useState } from 'react';\r\nimport SuggestedItem from './suggestion-item';\r\nimport styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst ListContainer = styled.div<Themable>`\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: flex-start;\r\n  row-gap: ${({ theme }) => theme.aiChat.suggestions.gap};\r\n`;\r\n\r\ntype Props = {\r\n  questions: string[];\r\n  onSelection: (question: string) => void;\r\n};\r\n\r\nexport default function SuggestionList({ questions, onSelection }: Props) {\r\n  const { t } = useTranslation();\r\n  const [showLess, setShowLess] = useState(true);\r\n\r\n  const questionsToShow = useMemo(() => {\r\n    if (showLess && questions.length > 5) {\r\n      return questions.slice(0, 4);\r\n    }\r\n    return questions;\r\n  }, [questions, showLess]);\r\n\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <ListContainer aria-label=\"list of suggested questions\" theme={themeSettings}>\r\n      {questionsToShow.map((question) => (\r\n        <SuggestedItem key={question} question={question} onClick={() => onSelection(question)} />\r\n      ))}\r\n      {questionsToShow.length < questions.length && (\r\n        <SuggestedItem question={t('ai.buttons.seeMore')} onClick={() => setShowLess(false)} />\r\n      )}\r\n    </ListContainer>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport styled from '@emotion/styled';\r\n\r\nconst Row = styled.div<Themable>`\r\n  width: 283px;\r\n  height: 32px;\r\n  border-radius: 10px;\r\n  background: ${({ theme }) => {\r\n    const [firstColor, secondColor] = theme.aiChat.suggestions.loadingGradient;\r\n    return `linear-gradient(\r\n      to right,\r\n      ${firstColor} 0%,\r\n      ${secondColor} 50%,\r\n      ${firstColor} 100%\r\n    )`;\r\n  }};\r\n  background-size: 200% auto;\r\n  animation: gradient 2s linear infinite;\r\n\r\n  @keyframes gradient {\r\n    0% {\r\n      background-position: 0 0;\r\n    }\r\n    100% {\r\n      background-position: -200% 0;\r\n    }\r\n  }\r\n`;\r\n\r\nconst SkeletonContainer = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  row-gap: 1rem;\r\n`;\r\n\r\nexport default function SuggestionListSkeleton() {\r\n  const { themeSettings } = useThemeContext();\r\n  return (\r\n    <SkeletonContainer>\r\n      {Array.from({ length: 3 }, (_, i) => (\r\n        <Row key={i} theme={themeSettings} />\r\n      ))}\r\n    </SkeletonContainer>\r\n  );\r\n}\r\n","import { useChatConfig } from '../chat-config';\r\nimport TextMessage from '../messages/text-message';\r\nimport SuggestionList from './suggestion-list';\r\nimport SuggestionListSkeleton from './suggestion-list-skeleton';\r\n\r\ntype Props = {\r\n  questions: string[];\r\n  isLoading: boolean;\r\n  onSelection: (question: string) => void;\r\n};\r\n\r\nexport default function SuggestionsWithIntro({ questions, isLoading, onSelection }: Props) {\r\n  const hasQuestions = questions.length > 0;\r\n\r\n  const { suggestionsWelcomeText } = useChatConfig();\r\n\r\n  if (isLoading) {\r\n    return <SuggestionListSkeleton />;\r\n  }\r\n\r\n  if (hasQuestions) {\r\n    return (\r\n      <>\r\n        {suggestionsWelcomeText && <TextMessage align=\"left\">{suggestionsWelcomeText}</TextMessage>}\r\n        <SuggestionList onSelection={onSelection} questions={questions} />\r\n      </>\r\n    );\r\n  }\r\n\r\n  return null;\r\n}\r\n","import styled from '@emotion/styled';\r\nimport { forwardRef, ReactNode } from 'react';\r\n\r\ntype ToolbarStyle = {\r\n  textColor: string;\r\n  backgroundColor: string;\r\n};\r\nexport interface Props {\r\n  title: string;\r\n  leftNav: ReactNode;\r\n  rightNav?: JSX.Element;\r\n  style: ToolbarStyle;\r\n}\r\n\r\ntype Styleable = {\r\n  style: ToolbarStyle;\r\n};\r\n\r\nconst ToolbarContainer = styled.div<Styleable>`\r\n  flex: 0 0 80px;\r\n  padding-left: 14px;\r\n  padding-right: 14px;\r\n  display: flex;\r\n  align-items: center;\r\n  position: relative;\r\n\r\n  background-color: ${({ style }) => style.backgroundColor};\r\n`;\r\n\r\nconst ToolbarTitle = styled.div<Styleable>`\r\n  font-size: 18px;\r\n  line-height: 22px;\r\n  font-weight: 600;\r\n  margin-left: 20px;\r\n\r\n  color: ${({ style }) => style.textColor};\r\n`;\r\nexport default forwardRef<HTMLDivElement, Props>(function Toolbar(\r\n  { title, leftNav, rightNav, style },\r\n  ref,\r\n) {\r\n  return (\r\n    <ToolbarContainer ref={ref} style={style}>\r\n      {leftNav}\r\n      <ToolbarTitle style={style}>{title}</ToolbarTitle>\r\n      {rightNav && <div className=\"csdk-ml-auto\">{rightNav}</div>}\r\n    </ToolbarContainer>\r\n  );\r\n});\r\n","import { Themable } from '@/theme-provider/types';\r\nimport styled from '@emotion/styled';\r\nimport { CompleteThemeSettings } from '..';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst AiDisclaimerContainer = styled.div<Themable>`\r\n  text-align: center;\r\n  font-size: 11px;\r\n  line-height: 18px;\r\n  white-space: pre-wrap;\r\n\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  align-items: center;\r\n  justify-content: center;\r\n  box-sizing: border-box;\r\n\r\n  color: ${({ theme }) => theme.aiChat.secondaryTextColor};\r\n`;\r\n\r\nexport default function AiDisclaimer({ theme }: { theme: CompleteThemeSettings }) {\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <AiDisclaimerContainer theme={theme}>\r\n      <div>{t('ai.disclaimer.poweredByAi')}</div>\r\n      <div> {t('ai.disclaimer.rateRequest')}</div>\r\n    </AiDisclaimerContainer>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\r\n\r\nexport default function ScrollToBottomIcon() {\r\n  const { themeSettings } = useThemeContext();\r\n  return (\r\n    <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M15.1747 9.1203L12 11.8401L8.82529 9.1203C8.61558 8.94064 8.29994 8.965 8.12028 9.17471C7.94062 9.38442 7.96498 9.70006 8.17469 9.87972L11.6747 12.8782C11.8619 13.0385 12.1381 13.0385 12.3253 12.8782L15.8253 9.87972C16.035 9.70006 16.0594 9.38442 15.8797 9.17471C15.7 8.965 15.3844 8.94064 15.1747 9.1203ZM15.8797 12.1731C15.7 11.9634 15.3844 11.9391 15.1747 12.1187L12 14.8385L8.82529 12.1187C8.61558 11.9391 8.29994 11.9634 8.12028 12.1731C7.94062 12.3829 7.96498 12.6985 8.17469 12.8782L11.6747 15.8766C11.8619 16.037 12.1381 16.037 12.3253 15.8766L15.8253 12.8782C16.035 12.6985 16.0594 12.3829 15.8797 12.1731Z\"\r\n        fill={themeSettings.aiChat.primaryTextColor}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport styled from '@emotion/styled';\r\nimport Color from 'colorjs.io';\r\nimport ScrollToBottomIcon from '../icons/scroll-to-bottom-icon';\r\n\r\nconst getRgba = (color: string, alpha: number) => {\r\n  const rgbaColor = new Color(color);\r\n  rgbaColor.alpha = alpha;\r\n  return rgbaColor;\r\n};\r\n\r\nconst Container = styled.div<Themable>`\r\n  font-size: inherit;\r\n  line-height: inherit;\r\n  padding-left: 8px;\r\n  padding-right: 8px;\r\n  padding-top: 4px;\r\n  border-radius: 16px;\r\n  margin-bottom: 4px;\r\n  box-shadow: ${({ theme }) => `0 4px 8px 0 ${getRgba(theme.aiChat.primaryTextColor, 0.2)}`};\r\n  cursor: pointer;\r\n  color: ${({ theme }) => theme.aiChat.clickableMessages.textColor};\r\n  background-color: ${({ theme }) => theme.aiChat.clickableMessages.backgroundColor};\r\n\r\n  &:hover {\r\n    color: ${({ theme }) => theme.aiChat.clickableMessages.hover.textColor};\r\n    background-color: ${({ theme }) => theme.aiChat.clickableMessages.hover.backgroundColor};\r\n    box-shadow: none;\r\n`;\r\n\r\nexport const ScrollToBottomButton = ({ onClick }: { onClick: () => void }) => {\r\n  const { themeSettings } = useThemeContext();\r\n  return (\r\n    <Container theme={themeSettings} onClick={onClick}>\r\n      <ScrollToBottomIcon />\r\n    </Container>\r\n  );\r\n};\r\n","import Popper from '@mui/material/Popper';\r\nimport { ScrollToBottomButton } from './buttons/scroll-to-bottom-button';\r\n\r\ntype ScrollToBottomProps = {\r\n  isVisible: boolean;\r\n  anchorElement: HTMLDivElement | null;\r\n  onClick: () => void;\r\n};\r\n\r\nexport const ScrollToBottom = ({ isVisible, onClick, anchorElement }: ScrollToBottomProps) => {\r\n  return (\r\n    <Popper anchorEl={anchorElement} open={isVisible} placement={'top'} sx={{ zIndex: 2 }}>\r\n      <ScrollToBottomButton onClick={onClick} />\r\n    </Popper>\r\n  );\r\n};\r\n","import { useLayoutEffect, useMemo, useRef, useState } from 'react';\r\nimport styled from '@emotion/styled';\r\n\r\nimport LoadingSpinner from '../common/components/loading-spinner';\r\nimport { useClearChatHistory } from './api/chat-history';\r\nimport { useChatConfig } from './chat-config';\r\nimport ChatInput from './chat-input';\r\nimport ChatWelcomeMessage from './messages/chat-welcome-message';\r\nimport ErrorContainer from './common/error-container';\r\nimport LoadingDotsIcon from './icons/loading-dots-icon';\r\nimport ClearHistoryMessage from './messages/clear-history-message';\r\nimport MessageListResolver from './messages/message-list-resolver';\r\nimport TextMessage from './messages/text-message';\r\nimport NavBackButton from './nav-back-button';\r\nimport { SuggestionsWithIntro } from './suggestions';\r\nimport Toolbar from './common/toolbar';\r\nimport { useChatSession } from './use-chat-session';\r\nimport { useGetQueryRecommendationsInternal } from './use-get-query-recommendations';\r\nimport { useThemeContext } from '..';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport AiDisclaimer from './ai-disclaimer';\r\nimport ClickableMessage from './messages/clickable-message';\r\nimport { ScrollToBottom } from './scroll-to-bottom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ChatContextDetails } from '@/ai/api/types';\r\n\r\nexport type ChatBoxProps = {\r\n  contextTitle: string;\r\n  contextDetails?: ChatContextDetails;\r\n  onGoBack?: () => void;\r\n};\r\n\r\nconst ChatBody = styled.div<Themable>`\r\n  display: flex;\r\n  flex-direction: column;\r\n  row-gap: ${({ theme }) => theme.aiChat.body.gapBetweenMessages};\r\n  overflow-y: scroll;\r\n  padding-left: ${({ theme }) => theme.aiChat.body.paddingLeft};\r\n  padding-right: ${({ theme }) => theme.aiChat.body.paddingRight};\r\n  padding-top: ${({ theme }) => theme.aiChat.body.paddingTop};\r\n  padding-bottom: ${({ theme }) => theme.aiChat.body.paddingBottom};\r\n  flex: initial;\r\n  height: 100%;\r\n`;\r\n\r\nconst ChatFooter = styled.div<Themable>`\r\n  padding-left: ${({ theme }) => theme.aiChat.footer.paddingLeft};\r\n  padding-right: ${({ theme }) => theme.aiChat.footer.paddingRight};\r\n  padding-top: ${({ theme }) => theme.aiChat.footer.paddingTop};\r\n  padding-bottom: ${({ theme }) => theme.aiChat.footer.paddingBottom};\r\n  display: flex;\r\n  flex-direction: column;\r\n  row-gap: 6px;\r\n`;\r\n\r\nconst FollowupQuestionsContainer = styled.div<Themable>`\r\n  display: flex;\r\n  flex-direction: column;\r\n  row-gap: ${({ theme }) => theme.aiChat.suggestions.gap};\r\n`;\r\n\r\nexport default function ChatBox({ contextTitle, onGoBack, contextDetails }: ChatBoxProps) {\r\n  const { t } = useTranslation();\r\n  const {\r\n    enableFollowupQuestions,\r\n    enableHeader,\r\n    numOfRecentPrompts,\r\n    numOfRecommendations,\r\n    customPrompt,\r\n  } = useChatConfig();\r\n  const { themeSettings } = useThemeContext();\r\n  const {\r\n    data: queryRecommendations,\r\n    isLoading: recommendationsLoading,\r\n    isError: recommendationsError,\r\n  } = useGetQueryRecommendationsInternal({\r\n    contextTitle: contextTitle,\r\n    count: numOfRecommendations,\r\n    customPrompt: customPrompt,\r\n  });\r\n  const questions = useMemo(\r\n    () => queryRecommendations?.map((q) => q.nlqPrompt),\r\n    [queryRecommendations],\r\n  );\r\n\r\n  const {\r\n    history,\r\n    lastNlqResponse,\r\n    isAwaitingResponse,\r\n    sendMessage,\r\n    isLoading,\r\n    chatId,\r\n    lastError,\r\n  } = useChatSession(contextTitle, contextDetails);\r\n\r\n  const { mutate: clearHistory, isLoading: isClearingHistory } = useClearChatHistory(chatId);\r\n\r\n  const [isClearHistoryOptionsVisible, setIsClearHistoryOptionsVisible] = useState(false);\r\n  const [isScrollToBottomVisible, setIsScrollToBottomVisible] = useState(false);\r\n  const showClearHistoryOptions = () => setIsClearHistoryOptionsVisible(true);\r\n  const hideClearHistoryOptions = () => setIsClearHistoryOptionsVisible(false);\r\n  const onClearHistoryConfirm = () => {\r\n    clearHistory();\r\n    hideClearHistoryOptions();\r\n  };\r\n\r\n  const chatContainerRef = useRef<HTMLDivElement | null>(null);\r\n  const chatFooterRef = useRef<HTMLDivElement | null>(null);\r\n\r\n  const handleScroll = () => {\r\n    if (!chatContainerRef?.current) return;\r\n    const { scrollTop, clientHeight, scrollHeight } = chatContainerRef.current;\r\n    if (scrollTop === undefined || clientHeight === undefined || scrollHeight === undefined) return;\r\n\r\n    const scrollFromBottom = scrollHeight - scrollTop - clientHeight;\r\n    // show the scroll to bottom button when the user scrolls up more than half of the chat window\r\n    const isVisible = scrollFromBottom > clientHeight / 2;\r\n    if (isScrollToBottomVisible !== isVisible) {\r\n      setIsScrollToBottomVisible(isVisible);\r\n    }\r\n  };\r\n\r\n  useLayoutEffect(() => {\r\n    if (chatContainerRef.current) {\r\n      chatContainerRef.current.scrollTop = chatContainerRef.current.scrollHeight;\r\n    }\r\n  }, [history, isClearHistoryOptionsVisible, isAwaitingResponse]);\r\n\r\n  const ref = useRef<HTMLDivElement>(null);\r\n\r\n  const header = enableHeader ? (\r\n    <Toolbar\r\n      ref={ref}\r\n      title={contextTitle}\r\n      leftNav={\r\n        onGoBack && (\r\n          <NavBackButton onClick={onGoBack} color={themeSettings.aiChat.header.textColor} />\r\n        )\r\n      }\r\n      style={themeSettings.aiChat.header}\r\n    />\r\n  ) : null;\r\n\r\n  const uniqueRecentPrompts = useMemo(\r\n    () =>\r\n      [\r\n        ...new Set(\r\n          history\r\n            .filter((m) => m.role === 'user')\r\n            .filter((m) => !questions?.includes(m.content))\r\n            .map((m) => m.content)\r\n            .reverse(),\r\n        ),\r\n      ].slice(0, numOfRecentPrompts),\r\n    [history, numOfRecentPrompts, questions],\r\n  );\r\n\r\n  if (lastError?.message === t('ai.errors.chatUnavailable')) {\r\n    return (\r\n      <>\r\n        {enableHeader && header}\r\n        <ErrorContainer text={lastError.message} />\r\n      </>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <>\r\n      {header}\r\n      <ChatBody ref={chatContainerRef} theme={themeSettings} onScroll={handleScroll}>\r\n        <ScrollToBottom\r\n          isVisible={isScrollToBottomVisible}\r\n          anchorElement={chatFooterRef.current}\r\n          onClick={() => {\r\n            chatContainerRef.current?.scroll({\r\n              top: chatContainerRef.current?.scrollHeight,\r\n              behavior: 'smooth',\r\n            });\r\n          }}\r\n        />\r\n        <ChatWelcomeMessage />\r\n        <SuggestionsWithIntro\r\n          questions={questions || []}\r\n          isLoading={recommendationsLoading}\r\n          onSelection={sendMessage}\r\n        />\r\n        {lastError && <TextMessage align=\"left\">{lastError.message}</TextMessage>}\r\n        {isLoading ? <LoadingSpinner /> : <MessageListResolver messages={history} />}\r\n        {enableFollowupQuestions &&\r\n          lastNlqResponse &&\r\n          (lastNlqResponse.followupQuestions?.length ?? 0) > 0 && (\r\n            <FollowupQuestionsContainer theme={themeSettings}>\r\n              {lastNlqResponse.followupQuestions?.slice(0, 2).map((question, i) => (\r\n                <ClickableMessage\r\n                  key={i}\r\n                  align=\"left\"\r\n                  onClick={() => {\r\n                    sendMessage(question);\r\n                  }}\r\n                >\r\n                  <div className=\"csdk-py-[7px] csdk-px-4\">{question}</div>\r\n                </ClickableMessage>\r\n              ))}\r\n            </FollowupQuestionsContainer>\r\n          )}\r\n        {(isAwaitingResponse || isClearingHistory) && <LoadingDotsIcon />}\r\n        {isClearHistoryOptionsVisible && (\r\n          <ClearHistoryMessage\r\n            onCancel={hideClearHistoryOptions}\r\n            onConfirm={onClearHistoryConfirm}\r\n          />\r\n        )}\r\n      </ChatBody>\r\n\r\n      <ChatFooter ref={chatFooterRef} theme={themeSettings}>\r\n        <ChatInput\r\n          onSendMessage={sendMessage}\r\n          disabled={isAwaitingResponse || isLoading}\r\n          onClearHistoryClick={showClearHistoryOptions}\r\n          suggestions={questions || []}\r\n          recentPrompts={uniqueRecentPrompts}\r\n          isLoading={recommendationsLoading || isLoading}\r\n          recommendationsError={recommendationsError}\r\n          onChange={hideClearHistoryOptions}\r\n        />\r\n        <AiDisclaimer theme={themeSettings} />\r\n      </ChatFooter>\r\n    </>\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\r\nimport ArrowLeftIcon from '../icons/arrow-left-icon';\r\nimport styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { getSlightlyDifferentColor } from '@/utils/color';\r\n\r\nconst Container = styled.button<Themable>`\r\n  font-family: ${({ theme }) => theme.typography.fontFamily};\r\n  padding: 20px;\r\n  border: none;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  text-align: left;\r\n  border-radius: 15px;\r\n  box-shadow: 0px 1px 2px rgba(9, 9, 10, 0.1), 0px 2px 4px rgba(9, 9, 10, 0.1);\r\n  cursor: pointer;\r\n\r\n  background-color: ${({ theme }) => theme.aiChat.dataTopics.items.backgroundColor};\r\n`;\r\n\r\nconst Title = styled.div<Themable>`\r\n  font-size: 1.05rem;\r\n  line-height: 28px;\r\n\r\n  color: ${({ theme }) => theme.aiChat.dataTopics.items.textColor};\r\n`;\r\n\r\nconst Description = styled.div<Themable>`\r\n  font-size: ${({ theme }) => theme.aiChat.primaryFontSize[0]};\r\n  line-height: ${({ theme }) => theme.aiChat.primaryFontSize[1]};\r\n\r\n  color: ${({ theme }) =>\r\n    getSlightlyDifferentColor(theme.aiChat.dataTopics.items.textColor, 0, 0.5)};\r\n`;\r\n\r\nconst IconContainer = styled.div`\r\n  width: 16px;\r\n  height: 16px;\r\n  transform: rotate(180deg);\r\n`;\r\n\r\ntype Props = {\r\n  title: string;\r\n  description?: string;\r\n  onClick?: () => void;\r\n};\r\n\r\nexport default function DataTopicItem(props: Props) {\r\n  const { title, description, onClick } = props;\r\n\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <Container onClick={onClick} theme={themeSettings}>\r\n      <div>\r\n        <Title theme={themeSettings}>{title}</Title>\r\n        <Description theme={themeSettings}>{description}</Description>\r\n      </div>\r\n      <IconContainer>\r\n        <ArrowLeftIcon color={themeSettings.aiChat.icons.color} />\r\n      </IconContainer>\r\n    </Container>\r\n  );\r\n}\r\n","import styled from '@emotion/styled';\r\nimport DataTopicItem from './data-topic-item';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport interface DataTopic {\r\n  title: string;\r\n  onClick?: () => void;\r\n}\r\n\r\nexport interface Props {\r\n  dataTopics: DataTopic[];\r\n}\r\n\r\nconst FlexContainer = styled.div`\r\n  padding: 20px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 20px;\r\n  overflow: auto;\r\n`;\r\n\r\nconst Title = styled.div<Themable>`\r\n  font-size: 24px;\r\n  line-height: 32px;\r\n  font-weight: 600;\r\n  text-align: center;\r\n  padding-bottom: 4px;\r\n\r\n  color: ${({ theme }) => theme.aiChat.primaryTextColor};\r\n`;\r\n\r\nconst Subtitle = styled.div<Themable>`\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n\r\n  color: ${({ theme }) => theme.aiChat.primaryTextColor};\r\n`;\r\n\r\nexport default function DataTopicList(props: Props) {\r\n  const { dataTopics } = props;\r\n\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  const { t } = useTranslation();\r\n\r\n  return (\r\n    <FlexContainer>\r\n      <Title theme={themeSettings}>{t('ai.dataTopics')}</Title>\r\n      <Subtitle theme={themeSettings}>\r\n        {t('ai.chatbotDescription')}\r\n        <br />\r\n        <br />\r\n        {t('ai.topicSelectPrompt')}\r\n      </Subtitle>\r\n      {dataTopics.map((dataTopic) => {\r\n        return <DataTopicItem {...dataTopic} key={dataTopic.title} />;\r\n      })}\r\n    </FlexContainer>\r\n  );\r\n}\r\n","const SISENSE_BLACK = '#000000';\r\nconst SISENSE_WHITE = '#FFFFFF';\r\n\r\nexport default function SisenseLogo({ isDarkBackground = false }: { isDarkBackground: boolean }) {\r\n  const fillColor = isDarkBackground ? SISENSE_WHITE : SISENSE_BLACK;\r\n  return (\r\n    <svg\r\n      width=\"32\"\r\n      height=\"32\"\r\n      viewBox=\"0 0 500 504\"\r\n      fill=\"none\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n    >\r\n      <path\r\n        d=\"M365.111 69.5654C350.571 69.5654 338.747 81.3237 338.747 95.7826C338.747 110.241 350.571 122 365.111 122C379.651 122 391.476 110.241 391.476 95.7826C391.476 81.3237 379.651 69.5654 365.111 69.5654Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M135.365 147.679C120.824 147.679 109 159.437 109 173.896C109 188.355 120.824 200.113 135.365 200.113C149.905 200.113 161.715 188.355 161.715 173.896C161.715 159.437 149.891 147.679 135.365 147.679Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M135.365 225.789C120.824 225.789 109 237.547 109 252.006C109 266.465 120.824 278.21 135.365 278.21C149.905 278.21 161.715 266.451 161.715 252.006C161.715 237.561 149.891 225.789 135.365 225.789Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M364.401 225.789C349.861 225.789 338.037 237.547 338.037 252.006C338.037 266.465 349.861 278.21 364.401 278.21C378.941 278.21 390.766 266.451 390.766 252.006C390.766 237.561 378.941 225.789 364.401 225.789Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M365.111 303.899C350.571 303.899 338.747 315.658 338.747 330.117C338.747 344.575 350.571 356.334 365.111 356.334C379.651 356.334 391.476 344.575 391.476 330.117C391.476 315.658 379.651 303.899 365.111 303.899Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M135.365 382.013C120.824 382.013 109 393.771 109 408.23C109 422.689 120.824 434.447 135.365 434.447C149.905 434.447 161.715 422.689 161.715 408.23C161.715 393.771 149.891 382.013 135.365 382.013Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M289.516 142.11C271.898 142.11 257.567 156.362 257.567 173.895C257.567 191.429 271.898 205.666 289.516 205.666C307.135 205.666 321.466 191.415 321.466 173.895C321.466 156.375 307.135 142.11 289.516 142.11Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M210.96 142.11C193.342 142.11 179.01 156.362 179.01 173.895C179.01 191.429 193.342 205.666 210.96 205.666C228.578 205.666 242.909 191.415 242.909 173.895C242.909 156.375 228.578 142.11 210.96 142.11Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M289.516 220.224C271.898 220.224 257.567 234.475 257.567 252.008C257.567 269.542 271.898 283.779 289.516 283.779C307.135 283.779 321.466 269.528 321.466 252.008C321.466 234.489 307.135 220.224 289.516 220.224Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M210.96 220.224C193.342 220.224 179.01 234.475 179.01 252.008C179.01 269.542 193.342 283.779 210.96 283.779C228.578 283.779 242.909 269.528 242.909 252.008C242.909 234.489 228.578 220.224 210.96 220.224Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M289.516 298.334C271.898 298.334 257.567 312.585 257.567 330.105C257.567 347.624 271.898 361.889 289.516 361.889C307.135 361.889 321.466 347.638 321.466 330.105C321.466 312.571 307.135 298.334 289.516 298.334Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M210.96 298.334C193.342 298.334 179.01 312.585 179.01 330.105C179.01 347.624 193.342 361.889 210.96 361.889C228.578 361.889 242.909 347.638 242.909 330.105C242.909 312.571 228.578 298.334 210.96 298.334Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M289.516 64C271.898 64 257.567 78.2512 257.567 95.7847C257.567 113.318 271.898 127.555 289.516 127.555C307.135 127.555 321.466 113.304 321.466 95.7847C321.466 78.265 307.135 64 289.516 64Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M210.96 64C193.342 64 179.01 78.2512 179.01 95.7847C179.01 113.318 193.342 127.555 210.96 127.555C228.578 127.555 242.909 113.304 242.909 95.7847C242.909 78.265 228.578 64 210.96 64Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M289.516 376.442C271.898 376.442 257.567 390.694 257.567 408.213C257.567 425.733 271.898 439.998 289.516 439.998C307.135 439.998 321.466 425.747 321.466 408.213C321.466 390.68 307.135 376.442 289.516 376.442Z\"\r\n        fill={fillColor}\r\n      />\r\n      <path\r\n        d=\"M210.96 376.442C193.342 376.442 179.01 390.694 179.01 408.213C179.01 425.733 193.342 439.998 210.96 439.998C228.578 439.998 242.909 425.747 242.909 408.213C242.909 390.68 228.578 376.442 210.96 376.442Z\"\r\n        fill={fillColor}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import { useMemo } from 'react';\r\n\r\nimport { DataTopicList } from './data-topics';\r\nimport SisenseLogo from './icons/sisense-logo';\r\nimport LoadingSpinner from '../common/components/loading-spinner';\r\nimport Toolbar from './common/toolbar';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport { useChatConfig } from './chat-config';\r\nimport { getDarkFactor, toColor } from '@/utils/color';\r\nimport styled from '@emotion/styled';\r\n\r\nconst LogoContainer = styled.div`\r\n  margin-left: 14px;\r\n  margin-top: 3px;\r\n`;\r\n\r\nconst DataTopicsContainer = styled.div<Themable>`\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: top;\r\n  overflow: hidden;\r\n  height: 100%;\r\n\r\n  background-color: ${({ theme }) => theme.aiChat.dataTopics.backgroundColor};\r\n`;\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ntype ChatHomeProps = {\r\n  dataTopicsList: string[];\r\n  onDataTopicClick: (title: string) => void;\r\n};\r\n\r\nexport default function ChatHome({ dataTopicsList, onDataTopicClick }: ChatHomeProps) {\r\n  const { enableHeader } = useChatConfig();\r\n  const { themeSettings } = useThemeContext();\r\n  const { t } = useTranslation();\r\n\r\n  const dataTopics = useMemo(() => {\r\n    return dataTopicsList?.map((title) => ({\r\n      title,\r\n      onClick: () => onDataTopicClick(title),\r\n    }));\r\n  }, [dataTopicsList, onDataTopicClick]);\r\n\r\n  const isDarkBackground =\r\n    getDarkFactor(toColor(themeSettings.aiChat.header.backgroundColor)) > 0.5;\r\n  return (\r\n    <>\r\n      {enableHeader ? (\r\n        <Toolbar\r\n          title={t('ai.analyticsChatbot')}\r\n          leftNav={\r\n            <LogoContainer>\r\n              <SisenseLogo isDarkBackground={isDarkBackground} />\r\n            </LogoContainer>\r\n          }\r\n          style={themeSettings.aiChat.header}\r\n        />\r\n      ) : null}\r\n      <DataTopicsContainer theme={themeSettings}>\r\n        {!dataTopics && <LoadingSpinner />}\r\n        {dataTopics && <DataTopicList dataTopics={dataTopics} />}\r\n      </DataTopicsContainer>\r\n    </>\r\n  );\r\n}\r\n","import { useQueryClient } from '@tanstack/react-query';\r\nimport { useCallback, useState, useMemo } from 'react';\r\nimport { useGetDataTopics } from './api/hooks';\r\nimport ChatBox from './chat-box';\r\nimport { useChatConfig } from './chat-config';\r\nimport ChatHome from './chat-home';\r\nimport ErrorContainer from './common/error-container';\r\nimport LoadingSpinner from '../common/components/loading-spinner';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport default function ChatRouter() {\r\n  const [selectedContext, setSelectedContext] = useState<string>();\r\n  const [errorMessage, setErrorMessage] = useState<string>();\r\n\r\n  const { data, fetchStatus } = useGetDataTopics();\r\n\r\n  const { dataTopicsList, contextDetails } = useChatConfig();\r\n  const { t } = useTranslation();\r\n  const noAvailableDataTopicsErrorMessage = t('ai.errors.noAvailableDataTopics');\r\n\r\n  const onContextsLoaded = useCallback(\r\n    (validDataTopicsList: string[]) => {\r\n      if (!validDataTopicsList.length) {\r\n        setErrorMessage(noAvailableDataTopicsErrorMessage);\r\n      } else if (validDataTopicsList.length === 1) {\r\n        setErrorMessage(undefined);\r\n        setSelectedContext(validDataTopicsList[0]);\r\n      }\r\n    },\r\n    [noAvailableDataTopicsErrorMessage],\r\n  );\r\n\r\n  const validDataTopicsList = useMemo(() => {\r\n    if (data && fetchStatus === 'idle') {\r\n      const allowedContexts = dataTopicsList?.length\r\n        ? data?.filter((dataTopic) => dataTopicsList?.includes(dataTopic.title))\r\n        : data;\r\n      const validDataTopicsList = allowedContexts.map((dataTopic) => dataTopic.title);\r\n\r\n      onContextsLoaded(validDataTopicsList);\r\n\r\n      return validDataTopicsList;\r\n    }\r\n    return [];\r\n  }, [data, fetchStatus, dataTopicsList, onContextsLoaded]);\r\n\r\n  const queryClient = useQueryClient();\r\n  const handleRefresh = useCallback(() => {\r\n    setErrorMessage(undefined);\r\n    queryClient.invalidateQueries(['getDataTopics']);\r\n  }, [queryClient]);\r\n\r\n  if (errorMessage) {\r\n    return (\r\n      <ErrorContainer\r\n        text={errorMessage}\r\n        action={{ text: t('ai.buttons.refresh'), onClick: handleRefresh }}\r\n      />\r\n    );\r\n  }\r\n\r\n  if (validDataTopicsList.length === 1 && !selectedContext) {\r\n    return <LoadingSpinner />;\r\n  }\r\n\r\n  return selectedContext ? (\r\n    <ChatBox\r\n      contextTitle={selectedContext}\r\n      contextDetails={contextDetails}\r\n      onGoBack={validDataTopicsList.length === 1 ? undefined : () => setSelectedContext(undefined)}\r\n    />\r\n  ) : (\r\n    <ChatHome\r\n      dataTopicsList={validDataTopicsList}\r\n      onDataTopicClick={(title) => setSelectedContext(title)}\r\n    />\r\n  );\r\n}\r\n","import { useThemeContext } from '@/theme-provider';\nimport { CSSProperties } from 'react';\nimport { asSisenseComponent } from '../decorators/component-decorators/as-sisense-component';\nimport { ChatConfig, ChatConfigProvider } from './chat-config';\nimport { ChatFrame } from './chat-frame';\nimport ChatRouter from './chat-router';\n\n/**\n * Props for {@link Chatbot} component.\n */\nexport interface ChatbotProps {\n  /**\n   * Total width of the chatbot\n   *\n   * If not specified, a default width of `500px` will be used.\n   */\n  width?: CSSProperties['width'];\n\n  /**\n   * Total height of the chatbot\n   *\n   * If not specified, a default height of `900px` will be used.\n   */\n  height?: CSSProperties['height'];\n\n  /**\n   * Various configuration options for the chatbot\n   */\n  config?: Partial<ChatConfig>;\n}\n\n/**\n * React component that displays a chatbot with data topic selection.\n * You can optionally configure size, config e.g. data topics, recommendations, UI text.\n *\n * @example\n * ```tsx\n * import { SisenseContextProvider } from 'sisense-sdk-ui-next';\n * import { AiContextProvider, Chatbot } from '@sisense/sdk-ui/ai';\n *\n * function App() {\n *   return (\n *     <SisenseContextProvider {...sisenseContextProps}>\n *       <AiContextProvider>\n *         <Chatbot\n *            width={1000}\n *            height={800}\n *            config={{\n *               enableFollowupQuestions: true,\n *               numOfRecommendations: 2,\n *               dataTopicsList: [\n *                  'Sample ECommerce',\n *                   'Sample Healthcare'\n *               ],\n *               inputPromptText: 'What do you want to explore?',\n *               welcomeText: 'Welcome to Acme AI, powered by Sisense',\n *               suggestionsWelcomeText: 'Would you like to know:',\n *            }}\n *         />\n *       </AiContextProvider>\n *     </SisenseContextProvider>\n *   );\n * }\n * ```\n * @param props - {@link ChatbotProps}\n * @group Generative AI\n */\nexport const Chatbot = asSisenseComponent({\n  componentName: 'Chatbot',\n})((props: ChatbotProps) => {\n  const { width, height, config } = props;\n  const { themeSettings } = useThemeContext();\n  return (\n    <ChatConfigProvider value={config ?? {}}>\n      <ChatFrame\n        id=\"csdk-chatbot-frame\"\n        width={width}\n        height={height}\n        theme={themeSettings}\n        tabIndex={0}\n      >\n        <ChatRouter />\n      </ChatFrame>\n    </ChatConfigProvider>\n  );\n});\n","import { asSisenseComponent } from '@/decorators/component-decorators/as-sisense-component';\r\nimport Collapsible from './common/collapsible';\r\nimport { useGetNlgInsightsInternal, UseGetNlgInsightsParams } from './use-get-nlg-insights';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n/**\r\n * Props for {@link GetNlgInsights} component.\r\n */\r\nexport interface GetNlgInsightsProps extends Omit<UseGetNlgInsightsParams, 'enabled'> {}\r\n\r\n/**\r\n * React component that fetches and displays a collapsible analysis of the provided query using natural language generation (NLG).\r\n * Specifying a query is similar to providing parameters to a {@link useExecuteQuery} hook, using dimensions, measures, and filters.\r\n *\r\n * @example\r\n * ```tsx\r\n * <GetNlgInsights\r\n *   dataSource=\"Sample ECommerce\"\r\n *   dimensions={[DM.Commerce.Date.Years]}\r\n *   measures={[measureFactory.sum(DM.Commerce.Revenue)]}\r\n * />\r\n * ```\r\n * @param props - {@link GetNlgInsightsProps}\r\n * @returns Collapsible container wrapping a text summary\r\n * @group Generative AI\r\n */\r\nexport default asSisenseComponent({\r\n  componentName: 'GetNlgInsights',\r\n})(function GetNlgInsights(props: GetNlgInsightsProps) {\r\n  const { data, isLoading, isError } = useGetNlgInsightsInternal(props);\r\n  const { t } = useTranslation();\r\n\r\n  if (isError) {\r\n    return <>{t('ai.errors.unexpected')}</>;\r\n  }\r\n\r\n  const summary = data ?? t('ai.errors.insightsNotAvailable');\r\n\r\n  return <Collapsible text={isLoading ? 'Loading...' : summary} />;\r\n});\r\n","import { Themable } from '@/theme-provider/types';\r\n\r\nexport default function AiIcon({ theme }: Themable) {\r\n  const iconColor = theme.general.brandColor;\r\n\r\n  return (\r\n    <svg\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n      width=\"24\"\r\n      height=\"24\"\r\n      viewBox=\"-2 -3 24 24\"\r\n      fill=\"none\"\r\n    >\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M12.0533 3.62671e-06C12.0557 -9.45649e-05 12.0577 0.00181346 12.0578 0.00422597C12.1926 3.98958 15.4422 7.18501 19.4491 7.23273C19.4494 7.23273 19.4496 7.23296 19.4496 7.23325C19.4496 7.23356 19.4494 7.23381 19.4491 7.23382C15.3869 7.2822 12.1029 10.5659 12.054 14.628C12.054 14.6283 12.0538 14.6285 12.0535 14.6285C12.0532 14.6285 12.0529 14.6283 12.0529 14.628C12.0047 10.6218 8.80995 7.37281 4.8253 7.23765C4.82287 7.23757 4.82095 7.23552 4.82105 7.2331C4.82114 7.23081 4.82301 7.22897 4.8253 7.2289C8.75488 7.0956 11.9163 3.93392 12.0491 0.004224C12.0492 0.00194873 12.051 9.62326e-05 12.0533 3.62671e-06Z\"\r\n        fill={iconColor}\r\n      />\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M9.0973 12.7759C7.1172 12.7236 5.51984 11.1352 5.45331 9.1587C5.45326 9.1573 5.45209 9.1562 5.4507 9.15625C5.44938 9.1563 5.44832 9.15738 5.44828 9.15869C5.38204 11.1266 3.79825 12.7098 1.83009 12.7751C1.82969 12.7752 1.82936 12.7755 1.82935 12.7759C1.82933 12.7763 1.82967 12.7767 1.83009 12.7767C3.8264 12.8429 5.42727 14.4708 5.45019 16.4778C5.45019 16.4781 5.45045 16.4784 5.45077 16.4784C5.45111 16.4784 5.4514 16.4781 5.4514 16.4778C5.47442 14.4622 7.089 12.8289 9.0973 12.7759Z\"\r\n        fill={iconColor}\r\n      />\r\n      <path\r\n        fillRule=\"evenodd\"\r\n        clipRule=\"evenodd\"\r\n        d=\"M2.8778 2.15728C2.87779 2.15701 2.8779 2.15674 2.8781 2.15655C2.87874 2.15591 2.87983 2.15638 2.87981 2.15728C2.87934 2.17566 2.87911 2.1941 2.87911 2.21259C2.87911 3.36434 3.78842 4.30371 4.92829 4.35195C3.78842 4.40019 2.87911 5.33955 2.87911 6.4913C2.87911 6.56284 2.88262 6.63356 2.88947 6.7033C2.89045 6.7133 2.8783 6.71912 2.87119 6.71202C2.86894 6.70976 2.86781 6.70662 2.86813 6.70344C2.87499 6.63366 2.8785 6.56289 2.8785 6.4913C2.8785 5.33956 1.96921 4.40021 0.829346 4.35195C1.96921 4.30369 2.8785 3.36433 2.8785 2.21259C2.8785 2.1941 2.87827 2.17566 2.8778 2.15728ZM5.16566 4.35485C5.16834 4.35503 5.16981 4.35179 5.16791 4.34989C5.16732 4.3493 5.1665 4.34899 5.16567 4.34905C5.14802 4.35023 5.13031 4.3512 5.11255 4.35195C5.13031 4.3527 5.14801 4.35367 5.16566 4.35485Z\"\r\n        fill={iconColor}\r\n      />\r\n    </svg>\r\n  );\r\n}\r\n","import { GetNlgInsightsRequest } from '@/ai';\r\nimport styled from '@emotion/styled';\r\nimport { Themable } from '@/theme-provider/types';\r\nimport { useThemeContext } from '@/theme-provider';\r\nimport FeedbackWrapper from '@/ai/messages/feedback-wrapper';\r\nimport Collapsible from '@/ai/common/collapsible';\r\nimport AiIcon from '@/ai/icons/ai-icon';\r\n\r\nexport interface ChartInsightsProps {\r\n  summary: string;\r\n  nlgRequest: GetNlgInsightsRequest;\r\n}\r\n\r\nconst FlexDiv = styled.div<Themable>`\r\n  display: flex;\r\n  flex-direction: row;\r\n  align-items: center;\r\n  gap: 10px;\r\n  margin: 24px 0;\r\n  max-width: 640px;\r\n  color: ${({ theme }) => theme.chart.textColor};\r\n  background-color: ${({ theme }) => theme.chart.backgroundColor};\r\n`;\r\n\r\nconst IconDiv = styled.div<Themable>`\r\n  align-self: flex-start;\r\n`;\r\n\r\nexport const ChartInsights = ({ summary, nlgRequest }: ChartInsightsProps) => {\r\n  const { themeSettings } = useThemeContext();\r\n\r\n  return (\r\n    <FeedbackWrapper\r\n      sourceId={nlgRequest.jaql.datasource.title}\r\n      data={nlgRequest}\r\n      type=\"chart/insights\"\r\n      buttonVisibility=\"always\"\r\n      renderContent={(buttonRow) => (\r\n        <FlexDiv theme={themeSettings}>\r\n          <IconDiv theme={themeSettings}>\r\n            <AiIcon theme={themeSettings}></AiIcon>\r\n          </IconDiv>\r\n          <Collapsible text={summary} />\r\n          {buttonRow}\r\n        </FlexDiv>\r\n      )}\r\n    />\r\n  );\r\n};\r\n","import { useEffect, useState, useMemo } from 'react';\r\nimport { ChartWidget } from '@/widgets/chart-widget';\r\nimport { widgetComposer } from '@/analytics-composer';\r\nimport { ChartInsights } from '@/ai/chart/chart-insights';\r\nimport { Filter, Data, MetadataItem, FilterRelations } from '@sisense/sdk-data';\r\nimport type { GetNlgInsightsRequest, NlqResponseData } from '@/ai';\r\nimport { isChartWidgetProps } from '@/widget-by-id/utils';\r\nimport { useGetNlgInsightsInternal } from '@/ai/use-get-nlg-insights';\r\nimport LoadingDotsIcon from '@/ai/icons/loading-dots-icon';\r\nimport { useCommonFilters } from '@/common-filters/use-common-filters';\r\nimport { ChartWidgetProps, WidgetProps } from '@/props';\r\nimport { getFiltersArray } from '@/utils/filter-relations';\r\nimport upperFirst from 'lodash-es/upperFirst';\r\nimport merge from 'ts-deepmerge';\r\nimport { NlqChartWidgetStyleOptions } from '@/types';\r\n\r\n/**\r\n * Props for {@link NlqChartWidget} component.\r\n *\r\n * @group Generative AI\r\n * @internal\r\n */\r\nexport interface NlqChartWidgetProps {\r\n  /**\r\n   * Chatbot NLQ Response\r\n   */\r\n  nlqResponse: NlqResponseData;\r\n\r\n  /**\r\n   * The dashboard filters to be applied to the chart\r\n   */\r\n  filters?: Filter[] | FilterRelations;\r\n\r\n  /**\r\n   * A callback that allows to modify data immediately after it has been retrieved.\r\n   * Can be used to inject modification of queried data.\r\n   */\r\n  onDataReady?: (data: Data) => Data;\r\n\r\n  /**\r\n   * Boolean flag to show or hide the widget header\r\n   *\r\n   * Note: set to 'false' to hide the widget header\r\n   *\r\n   * @default true\r\n   */\r\n\r\n  styleOptions?: NlqChartWidgetStyleOptions;\r\n\r\n  /**\r\n   * Widget props if we have them in full, to ensure NlqChartWidget will be rendered\r\n   * the same way as ChartWidget\r\n   */\r\n  widgetProps?: ChartWidgetProps;\r\n}\r\n\r\n/**\r\n * React component that renders a chart widget based on NLQ response data.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { NlqChartWidget, NlqResponseData } from '@sisense/sdk-ui/ai';\r\n * import { Filter } from '@sisense/sdk-data';\r\n *\r\n * function ExampleComponent(nlqResponse: NlqResponseData, filters?: Filter[]) {\r\n *\r\n *    return (\r\n *      <ChartWidgetWithInsights\r\n *        nlqResponse={nlqResponse}\r\n *        filters={filters}\r\n *      />\r\n *    );\r\n * }\r\n * ```\r\n * @param props - {@link NlqChartWidgetProps}\r\n * @group Generative AI\r\n * @internal\r\n */\r\nexport const NlqChartWidget = ({\r\n  nlqResponse,\r\n  onDataReady,\r\n  styleOptions,\r\n  widgetProps,\r\n  filters = [],\r\n}: NlqChartWidgetProps) => {\r\n  nlqResponse.queryTitle = upperFirst(nlqResponse.queryTitle);\r\n\r\n  const { connectToWidgetProps } = useCommonFilters({\r\n    initialFilters: filters,\r\n  });\r\n  const [chartWidgetProps, setChartWidgetProps] = useState<WidgetProps | null>(null);\r\n\r\n  useEffect(() => {\r\n    const widgetProps = widgetComposer.toWidgetProps(nlqResponse, {\r\n      useCustomizedStyleOptions: true,\r\n    });\r\n    if (!widgetProps) setChartWidgetProps(null);\r\n    else {\r\n      if (styleOptions && widgetProps.styleOptions) {\r\n        widgetProps.styleOptions = merge(widgetProps.styleOptions, styleOptions);\r\n      }\r\n\r\n      const connectedProps = connectToWidgetProps(widgetProps, {\r\n        shouldAffectFilters: false,\r\n        applyMode: 'filter',\r\n      });\r\n\r\n      setChartWidgetProps(connectedProps);\r\n    }\r\n  }, [nlqResponse, connectToWidgetProps, styleOptions]);\r\n\r\n  const nlqResponseWithFilters: GetNlgInsightsRequest = useMemo(() => {\r\n    const filters =\r\n      chartWidgetProps && isChartWidgetProps(chartWidgetProps)\r\n        ? getFiltersArray(chartWidgetProps?.filters)\r\n        : [];\r\n\r\n    const metadata = nlqResponse.jaql.metadata\r\n      .filter((meta) => !meta.jaql.filter)\r\n      .concat(\r\n        filters\r\n          .filter((filter) => !filter.config.disabled)\r\n          .map((filter) => filter.jaql() as MetadataItem),\r\n      );\r\n\r\n    return { ...nlqResponse, jaql: { ...nlqResponse.jaql, metadata }, verbosity: 'Low' };\r\n  }, [nlqResponse, chartWidgetProps]);\r\n\r\n  const { data: summary, isLoading, isError } = useGetNlgInsightsInternal(nlqResponseWithFilters);\r\n\r\n  if (isLoading || !chartWidgetProps) {\r\n    return <LoadingDotsIcon />;\r\n  }\r\n\r\n  if (!isChartWidgetProps(chartWidgetProps)) {\r\n    return <></>;\r\n  }\r\n\r\n  const finalChartWidgetProps = widgetProps || {\r\n    ...chartWidgetProps,\r\n    styleOptions,\r\n    onDataReady,\r\n  };\r\n  return (\r\n    <ChartWidget\r\n      {...finalChartWidgetProps}\r\n      highlightSelectionDisabled={true}\r\n      topSlot={\r\n        summary &&\r\n        !isError && (\r\n          <ChartInsights nlgRequest={nlqResponseWithFilters} summary={summary}></ChartInsights>\r\n        )\r\n      }\r\n    ></ChartWidget>\r\n  );\r\n};\r\n","import { PropsWithChildren } from 'react';\r\nimport { ChatApiContext } from './api/chat-api-provider';\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\r\nimport { ChatIdStorageProvider } from './chat-id-storage-provider';\r\nimport { type ChatRestApi } from './api/chat-rest-api';\r\nimport { CustomContextProviderProps } from '../types';\r\n\r\n/** @internal */\r\nexport type CustomAiContext = {\r\n  api?: ChatRestApi;\r\n};\r\n\r\n/** @internal */\r\nexport type CustomAiContextProviderProps = CustomContextProviderProps<CustomAiContext>;\r\n\r\nconst queryClient = new QueryClient({\r\n  defaultOptions: {\r\n    queries: {\r\n      refetchOnWindowFocus: false,\r\n      refetchOnMount: false,\r\n    },\r\n  },\r\n});\r\n\r\n/** @internal */\r\nexport function CustomAiContextProvider({\r\n  children,\r\n  context,\r\n}: PropsWithChildren<CustomAiContextProviderProps>) {\r\n  return (\r\n    <ChatIdStorageProvider>\r\n      <ChatApiContext.Provider value={context?.api}>\r\n        <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\r\n      </ChatApiContext.Provider>\r\n    </ChatIdStorageProvider>\r\n  );\r\n}\r\n"],"names":["MutationObserver","Subscribable","client","options","_this$currentMutation","prevOptions","shallowEqualObjects","_this$currentMutation2","action","notifyOptions","variables","__spreadProps","__spreadValues","state","getDefaultState","isLoading","result","notifyManager","_this$mutateOptions$o","_this$mutateOptions","_this$mutateOptions$o2","_this$mutateOptions2","_this$mutateOptions$o3","_this$mutateOptions3","_this$mutateOptions$o4","_this$mutateOptions4","listener","useMutation","arg1","arg2","arg3","parseMutationArgs","queryClient","useQueryClient","observer","React","useSyncExternalStore","onStoreChange","mutate","mutateOptions","noop","shouldThrowError","ChatRestApi","constructor","httpClient","volatile","getChatContexts","__async","get","getNlgInsights","request","post","getQueryRecommendations","contextTitle","config","numOfRecommendations","userPrompt","encodeURIComponent","getNlqResult","setLlmConfig","catch","e","error","getAllChats","getChatById","chatId","createChat","sourceId","contextDetails","postChat","deleteChatHistory","delete","sendFeedback","ai","chat","getAll","getById","create","clearHistory","QueryClient","defaultOptions","queries","refetchOnWindowFocus","refetchOnMount","ChatApiContext","undefined","useChatApi","useContext","ChatApiProvider","children","app","useSisenseContext","api","useMemo","_jsx","Provider","value","QueryClientProvider","ChatIdStorageContext","createContext","useChatIdStorage","ChatIdStorageProvider","storage","setStorage","useState","getKey","useCallback","dashboardId","saveChatId","prevStorage","getChatId","AiContextProvider","prepareGetNlgInsightsPayload","params","dataSource","convertJaqlDataSource","filters","relations","getFilterListAndRelationsJaql","metadata","filterRelations","getJaqlQueryPayload","attributes","dimensions","measures","highlights","parameters","jaql","datasource","verbosity","useGetNlgInsightsInternal","enabled","payload","data","isError","isSuccess","refetch","useQuery","queryKey","queryFn","select","answer","useGetNlgInsightsWithoutTracking","restParams","useGetNlgInsights","withTracking","NLQ_RESULT_CHART_TYPES","prepareGetNlqResultPayload","query","chartTypes","title","text","timezone","useGetNlqResultInternal","widgetProps","widgetComposer","toWidgetProps","useCustomizedStyleOptions","enableAxisTitlesInWidgetProps","useGetNlqResult","DEFAULT_RECOMMENDATIONS_COUNT","useGetQueryRecommendationsInternal","count","customPrompt","recCount","shouldGetRecommendations","rawRecommendations","recommendations","map","recommendation","useGetQueryRecommendations","DEFAULTS","Object","freeze","enableFollowupQuestions","enableHeader","enableInsights","numOfRecentPrompts","ChatConfigContext","useChatConfig","ChatConfigProvider","t","useTranslation","entries","reduce","acc","key","val","inputPromptText","welcomeText","suggestionsWelcomeText","CHAT_HISTORY_QUERY_KEY","useFetchChatHistory","id","hideHistory","chatObj","chatHistory","useClearChatHistory","mutationFn","onError","onSettled","setQueriesData","useChatHistory","history","useEffect","useGetDataTopics","fetchStatus","useGetAllChats","useMaybeCreateChat","contextId","shouldCreate","mutation","onSuccess","invalidateQueries","isIdle","mapToChatMessage","response","errorMessage","responseType","toLowerCase","content","JSON","stringify","role","type","Error","useSendChatMessage","appendToHistory","messageObj","old","message","enableFollowup","onMutate","interpolationOptions","errorCode","defaultValue","useGetChat","createIfNotExist","chats","chatIdStorage","find","c","useLastNlqResponseFromHistory","length","lastNlqMessage","isNlqMessage","parse","isTextMessage","useChatSession","isCreateChatError","lastError","setLastError","isFetchHistoryError","TranslatableError","sendMessage","isSendMessageLoading","lastNlqResponse","isAwaitingResponse","useLastNlqResponse","useFinalNlqResponse","slice","reverse","MIN_ALLOWED_WIDTH","MIN_ALLOWED_HEIGHT","DEFAULT_WIDTH","DEFAULT_HEIGHT","ChatFrame","styled","theme","aiChat","borderRadius","backgroundColor","width","getCssProp","height","css","primaryFontSize","border","widthOrHeight","LoadingIcon","spin","svg","xmlns","viewBox","fill","className","path","fillRule","clipRule","d","fillOpacity","LoadingSpinner","div","aria-label","MessageIcon","icons","color","ClearChatIcon","iconColor","Section","SectionHeader","dropup","headers","textColor","hover","DropupItem","items","DropupSection","onSelect","alwaysExpanded","showItems","setShowItems","themeSettings","useThemeContext","onClick","v","toUpperCase","item","index","PopupContent","typography","fontFamily","boxShadow","ErrorMessage","isCommand","startsWith","ChatDropup","recentPrompts","suggestions","onSelection","anchorEl","recommendationsError","filteredSections","filter","section","Popper","open","placement","modifiers","name","offset","sx","zIndex","style","offsetWidth","props","Tooltip","MuiTooltip","disableInteractive","componentsProps","tooltip","bgcolor","tooltips","paddingX","paddingY","fontSize","fontWeight","arrow","CHAT_INPUT_MAX_LENGTH","ChatInputContainer","ClearHistoryButton","TextInput","input","focus","outlineColor","primaryTextColor","SendMessageButton","disabled","MIN_TEXTAREA_HEIGHT","ChatInput","onSendMessage","onClearHistoryClick","onChange","setText","handleSendMessage","finalText","trim","handleDropupSelect","selection","onKeyDownInput","preventDefault","handleChange","target","ref","useRef","useLayoutEffect","current","Math","max","scrollHeight","preventScroll","handleBlur","document","getElementById","contains","relatedTarget","cb","event","removeEventListener","getSelection","addEventListener","onBlur","maxLength","rows","spellCheck","placeholder","onKeyDown","span","data-state","r","n","i","l","o","a","s","u","p","f","h","m","g","y","k","x","b","C","$","S","w","E","z","L","A","O","T","B","M","R","I","D","U","N","j","H","P","_","F","W","G","Z","q","Q","V","X","J","K","Y","ee","te","ne","re","ie","le","oe","ae","ce","se","de","ue","pe","fe","he","me","ge","ye","ke","xe","be","ve","Ce","Me","ze","$e","Se","we","Ee","Le","Ae","Oe","Te","Be","Re","Ie","De","Ue","Ne","je","He","Pe","_e","Fe","We","Ge","Ze","qe","Qe","Ve","Xe","FlexContainer","align","MessageContainer","userMessages","systemMessages","TextMessage","Markdown","ChatWelcomeMessage","Container","Title","ActionButton","ErrorContainer","ExclamationMarkIcon","Dot","LoadingDotsIcon","MessageButton","clickableMessages","borderGradient","firstColor","secondColor","ClickableMessage","onMouseEnter","onMouseLeave","accessibleName","ClearHistoryMessage","onCancel","onConfirm","_Fragment","getDialogUtilityClass","slot","generateUtilityClass","dialogClasses","generateUtilityClasses","DialogContext","DialogBackdrop","Backdrop","styles","useUtilityClasses","ownerState","classes","scroll","maxWidth","fullWidth","fullScreen","slots","capitalize","composeClasses","DialogRoot","Modal","DialogContainer","DialogPaper","Paper","memoTheme","Dialog","inProps","useDefaultProps","useTheme","defaultTransitionDuration","_a","ariaDescribedby","ariaLabelledbyProp","ariaModal","BackdropComponent","BackdropProps","disableEscapeKeyDown","onBackdropClick","onClose","PaperComponent","PaperProps","slotProps","TransitionComponent","Fade","transitionDuration","TransitionProps","other","__objRest","backdropClick","handleMouseDown","handleBackdropClick","ariaLabelledby","useId","dialogContextValue","backwardCompatibleSlots","backwardCompatibleSlotProps","externalForwardedProps","RootSlot","rootSlotProps","useSlot","clsx","BackdropSlot","backdropSlotProps","PaperSlot","paperSlotProps","ContainerSlot","containerSlotProps","TransitionSlot","transitionSlotProps","PropTypes","CloseDialogIcon","fillColor","rect","rx","stroke","colors","row","secondary","default","active","link","accented","linkButton","primary","UI","additional","guiding","background","workspace","supporting","priority","interaction","defaultHover","guidingHover","linkHovered","primaryHovered","semantic","info","success","warning","infoBG","successBG","warningBG","errorBG","sisenseDark","ui","transientOptions","shouldForwardProp","propName","IconButton","MuiIconButton","$hoverColor","padding","ExpandIcon","InfoIcon","RefreshIcon","getHoverColor","getSlightlyDifferentColor","chart","InfoTooltip","disableTouchRipple","ThreeDotsMenu","setAnchorEl","handleClick","currentTarget","handleClose","ThreeDotsIcon","Menu","anchorOrigin","vertical","horizontal","transformOrigin","Boolean","MenuItem","disableRipple","icon","ExpandButton","ToolbarContainer","ChartMessageToolbar","infoTooltipText","onRefresh","onExpand","dropdownMenuItems","ChartMessage","expanded","setExpanded","inlineElement","expandedElement","isChartWidgetProps","detailedDescription","styleOptions","widgetStyleOptions","cornerRadius","header","renderToolbar","isTable","chartType","ChartWidget","hidden","expandedStyleOptions","inlineStyleOptions","legend","xAxis","yAxis","queryTitle","ThumbsDownIcon","ThumbsDownButton","feedbackIcons","hoverColor","ThumbsUpIcon","ThumbsUpButton","useHover","hovering","setHovering","previousNode","handleMouseEnter","handleMouseLeave","node","nodeType","Node","ELEMENT_NODE","body","gapBetweenMessages","FeedbackRow","visible","onSend","clicked","setClicked","FeedbackWrapper","buttonVisibility","renderContent","debounce","rating","areButtonsVisible","MAX_HEIGHT_PX","Collapsible","collapsed","setCollapsed","showReadMore","setShowReadMore","InsightsMessage","nlgRequest","LightBulbIcon","InsightsButton","lowerFirst","createCaseFirst","FlexRow","startsWithVowel","includes","NlqMessageGroup","alwaysShowFeedback","chatMode","chartRecommendations","userMsg","clarification","console","debug","chartTypeSegment","dataSourceTitle","showInsights","setShowInsights","onInsightsButtonClick","prev","isAnalyzeMode","buttonRow","_jsxs","MessageResolver","isLastMessage","nlqResponse","MessageResolver$1","unexpectedErrorHandler","displayMessage","MessageListResolver","messages","msg","ErrorBoundary","fallbackRender","ArrowLeftIcon","NavBackButton","Button","SuggestionItem","question","ListContainer","gap","SuggestionList","questions","showLess","setShowLess","questionsToShow","SuggestedItem","Row","loadingGradient","SkeletonContainer","SuggestionListSkeleton","Array","from","SuggestionsWithIntro","hasQuestions","ToolbarTitle","Toolbar","forwardRef","leftNav","rightNav","AiDisclaimerContainer","secondaryTextColor","AiDisclaimer","ScrollToBottomIcon","getRgba","alpha","rgbaColor","Color","ScrollToBottomButton","ScrollToBottom","isVisible","anchorElement","ChatBody","paddingLeft","paddingRight","paddingTop","paddingBottom","ChatFooter","footer","FollowupQuestionsContainer","ChatBox","onGoBack","queryRecommendations","recommendationsLoading","nlqPrompt","isClearingHistory","isClearHistoryOptionsVisible","setIsClearHistoryOptionsVisible","isScrollToBottomVisible","setIsScrollToBottomVisible","showClearHistoryOptions","hideClearHistoryOptions","onClearHistoryConfirm","chatContainerRef","chatFooterRef","handleScroll","scrollTop","clientHeight","uniqueRecentPrompts","Set","onScroll","top","behavior","followupQuestions","dataTopics","Description","IconContainer","DataTopicItem","description","Subtitle","DataTopicList","br","dataTopic","SISENSE_BLACK","SISENSE_WHITE","SisenseLogo","isDarkBackground","LogoContainer","DataTopicsContainer","ChatHome","dataTopicsList","onDataTopicClick","getDarkFactor","toColor","ChatRouter","selectedContext","setSelectedContext","setErrorMessage","noAvailableDataTopicsErrorMessage","onContextsLoaded","validDataTopicsList","handleRefresh","Chatbot","asSisenseComponent","componentName","tabIndex","summary","AiIcon","general","brandColor","FlexDiv","IconDiv","ChartInsights","NlqChartWidget","onDataReady","upperFirst","connectToWidgetProps","useCommonFilters","initialFilters","chartWidgetProps","setChartWidgetProps","merge","connectedProps","shouldAffectFilters","applyMode","nlqResponseWithFilters","getFiltersArray","meta","concat","finalChartWidgetProps","highlightSelectionDisabled","topSlot","CustomAiContextProvider","context"],"mappings":"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","x_google_ignoreList":[0,1,28,35,36,37,56]}