{
  "version": 3,
  "sources": ["../src/UiAiChat/UiAiChat.tsx", "../src/UiAiChat/UiAiChat.css.ts", "../src/Conversation/Conversation.tsx", "../src/Conversation/Conversation.css.ts", "../src/RequestView/assets/ai.svg", "../src/RequestView/RequestView.css.ts", "../src/AnswerView/AnswerView.tsx", "../src/AnswerView/AnswerView.css.ts", "../src/AnswerView/AnswerView.helpers.ts", "../src/PromptView/PromptView.tsx", "../src/PromptView/PromptView.css.ts", "../src/PromptView/PromptView.Edit.tsx", "../src/PromptView/assets/checked.svg", "../src/TextArea/TextArea.tsx", "../src/TextArea/TextArea.css.ts", "../src/PromptView/assets/edit.svg", "../src/PromptView/PromptView.Read.tsx", "../src/RequestView/RequestView.tsx", "../src/Conversation/Conversation.hooks.ts", "../src/Prompt/Prompt.tsx", "../src/Prompt/Prompt.css.ts", "../src/PromptContext/PromptContext.tsx", "../src/PromptContext/assets/ref.svg", "../src/PromptContext/assets/reset.svg", "../src/PromptContext/PromptContext.css.ts", "../src/PromptInput/PromptInput.tsx", "../src/PromptInput/assets/send.svg", "../src/PromptInput/assets/sending.svg", "../src/PromptInput/PromptInput.css.ts", "../src/PromptInput/PromptInput.hooks.ts", "../src/Suggestions/Suggestions.tsx", "../src/Suggestions/Suggestions.css.ts", "../src/Suggestions/Suggestions.Item.tsx", "../src/UiAiChat/hooks/useAutoScroll.ts", "../src/UiAiChat/hooks/useController.ts", "../src/UiAiChat/hooks/usePrompt.ts"],
  "sourcesContent": ["import { ForwardedRef, ReactNode, forwardRef, useRef } from 'react';\n\nimport clsx from 'clsx';\n\nimport * as styles from './UiAiChat.css';\n\nimport { Conversation } from '../Conversation';\nimport { Prompt } from '../Prompt';\nimport { Suggestions } from '../Suggestions';\nimport {\n  Controller,\n  InternalConversationController,\n  PromptInputController,\n  Request,\n  TableAction,\n} from '../types';\n\nimport { useAutoScroll, useController, usePrompt } from './hooks';\n\nexport type Props = {\n  className?: string;\n  /**\n   * Optional context of prompt.\n   */\n  context?: string;\n  /**\n   * List of requests.\n   */\n  conversation: Request[];\n  /**\n   * Optional placeholder for empty chat.\n   */\n  empty?: () => ReactNode;\n  /**\n   * Optional maximal length allowed for prompt.\n   */\n  maxPromptLength?: number;\n  /**\n   * Optional context reset handler.\n   */\n  onClearContext?: () => void;\n  /**\n   * Allows to resend existing prompt.\n   *\n   * @param id ID of request.\n   * @param prompt New prompt.\n   */\n  onResend: (id: number, prompt: string) => void;\n  /**\n   * Allows to send a new prompt.\n   *\n   * @param prompt New prompt.\n   */\n  onSend: (prompt: string) => void;\n  /**\n   * Optional message for pending requests.\n   */\n  pendingPlaceholder?: string;\n  /**\n   * Optional placeholder for prompt input.\n   */\n  placeholder?: string;\n  /**\n   * Optional prompt suggestions.\n   */\n  suggestions?: string[];\n  /**\n   * Optional table actions.\n   */\n  tableActions?: TableAction[];\n};\n\nexport const UiAiChat = forwardRef<Controller, Props>(\n  (\n    {\n      className,\n      context,\n      conversation,\n      empty,\n      maxPromptLength,\n      onClearContext,\n      onResend,\n      onSend,\n      pendingPlaceholder,\n      placeholder,\n      suggestions = [],\n      tableActions = [],\n    }: Props,\n    ref: ForwardedRef<Controller>,\n  ) => {\n    const conversationRef = useRef<InternalConversationController>(null);\n    const promptInputRef = useRef<PromptInputController>(null);\n\n    useController({ ref, conversationRef, promptInputRef });\n\n    useAutoScroll(conversation, conversationRef);\n\n    const {\n      isPending,\n      isSendable,\n      onChangePrompt,\n      onSend: handleSend,\n      onSuggest,\n      prompt,\n    } = usePrompt({\n      conversation,\n      onSend,\n      promptInputRef,\n    });\n\n    return (\n      <div className={clsx(styles.root, className)}>\n        <Conversation\n          className={styles.conversation}\n          conversation={conversation}\n          empty={empty}\n          isPending={isPending}\n          maxPromptLength={maxPromptLength}\n          onResend={onResend}\n          pendingPlaceholder={pendingPlaceholder}\n          ref={conversationRef}\n          tableActions={tableActions}\n        />\n        {suggestions.length > 0 && (\n          <Suggestions\n            className={styles.suggestions}\n            onSuggest={onSuggest}\n            suggestions={suggestions}\n          />\n        )}\n        <Prompt\n          context={context}\n          isSendable={isSendable}\n          isSending={isPending}\n          maxLength={maxPromptLength}\n          onChangePrompt={onChangePrompt}\n          onClearContext={onClearContext}\n          onSend={handleSend}\n          placeholder={placeholder ?? 'Ask GPT'}\n          prompt={prompt}\n          ref={promptInputRef}\n        />\n      </div>\n    );\n  },\n);\n\nif (import.meta.env.DEV) {\n  UiAiChat.displayName = 'ui-ai-chat(UiAiChat)';\n}\n", "import 'src/UiAiChat/UiAiChat.css.ts.vanilla.css?source=QGxheWVyIHRibC0tY29tcG9uZW50czsKQGxheWVyIHRibC0tY29tcG9uZW50cyB7CiAgLnRhYnVsYV91aV9haV9jaGF0X19kc2h1NTgwIHsKICAgIGNvbnRhaW5lci1uYW1lOiB0YWJ1bGFfdWlfYWlfY2hhdF9fdnBjN3FrMDsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICB9CiAgLnRhYnVsYV91aV9haV9jaGF0X19kc2h1NTgxIHsKICAgIGZsZXgtZ3JvdzogMTsKICB9CiAgLnRhYnVsYV91aV9haV9jaGF0X19kc2h1NTgyIHsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICB9Cn0';\nexport var conversation = 'tabula_ui_ai_chat__dshu581';\nexport var root = 'tabula_ui_ai_chat__dshu580';\nexport var suggestions = 'tabula_ui_ai_chat__dshu582';", "import { ReactNode, forwardRef } from 'react';\n\nimport { clsx } from 'clsx/lite';\n\nimport * as styles from './Conversation.css';\n\nimport { RequestView } from '../RequestView';\nimport { InternalConversationController, Request, TableAction } from '../types';\n\nimport { useController } from './Conversation.hooks';\n\nexport type Props = {\n  className?: string;\n  conversation: Request[];\n  empty?: () => ReactNode;\n  isPending: boolean;\n  maxPromptLength?: number;\n  onResend: (index: number, prompt: string) => void;\n  pendingPlaceholder?: string;\n  tableActions: TableAction[];\n};\n\nexport const Conversation = forwardRef<InternalConversationController, Props>(\n  (\n    {\n      className,\n      conversation,\n      empty,\n      isPending,\n      maxPromptLength,\n      onResend,\n      pendingPlaceholder,\n      tableActions,\n    },\n    ref,\n  ) => {\n    const conversationRef = useController(ref);\n\n    const isEmpty = conversation.length === 0;\n\n    return (\n      <div className={clsx(styles.root, className)} ref={conversationRef}>\n        <div className={isEmpty ? styles.placeholder : styles.requests}>\n          {isEmpty\n            ? empty?.()\n            : conversation.map((request) => (\n                <RequestView\n                  editDisabled={isPending}\n                  key={request.id ?? 'pending-request'}\n                  maxPromptLength={maxPromptLength}\n                  onResend={onResend}\n                  pendingPlaceholder={pendingPlaceholder}\n                  request={request}\n                  tableActions={tableActions}\n                />\n              ))}\n        </div>\n      </div>\n    );\n  },\n);\n\nif (import.meta.env.DEV) {\n  Conversation.displayName = 'ui-ai-chat(Conversation)';\n}\n", "import 'src/Conversation/Conversation.css.ts.vanilla.css?source=#H4sIAAAAAAAAA81Ty27jMAy85yt4WSABrIUS9AGol_yJwciMw0aWtDKdNrvIvxeynawWLdpDL3vSeEjKQ3K0dXimBLJzStnQxeDJS_-02H7Iw58FwE_B3eCwHrhGru0Bpa67--cUH_QYB4jYNOxbA-uH-Po0UuFEae_CizobwEHCxHbYHxV32JIBx54wqTZhw-RlKQEkxAp2Du1xPlbVd9Mkoe8jJvICek4fZd6w1j9Whbqef9PUyBiqSmjR2WWGoEZ6NfJFcQw9CwdvwJIXSuBoL9X1I3F7kAp2QSR0M1kUJ4qEYsCHGebY5dMFrOcFHChfbW5yPq_aXNd2U5vIofCJJjUN99Hh2cDe0bzOjFTDiezcXnBD56fY89AL78_KBi_kZSpT5Ju5N_bqI33bnI_ss-veKz1F-_jrqGGZy1-4kYOBR63zzCfxX7vyf7fbP4a739xcVsDScJkuDXf5YgybYgyv1xGu1_ru-kRzILXsDejiiRavWU9SpuPvTy-LyxtgP0aGRgQAAA';\nexport var placeholder = 'tabula_ui_ai_chat__m5jrp61';\nexport var requests = 'tabula_ui_ai_chat__m5jrp62';\nexport var root = 'tabula_ui_ai_chat__m5jrp60';", "import svgUrl from \"ni:svgr;uE_w2mpSRW0KLZkT5uwA5LrEObXDqzTGLXxpyKlIpQU\";\nexport default svgUrl;\nimport * as React from \"react\";\nimport { memo } from \"react\";\nconst SvgAi = props => <svg width={24} height={24} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><rect width={24} height={24} rx={12} fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M11.236 8.569A.333.333 0 0 0 11 8a1.667 1.667 0 0 1-1.667-1.667.333.333 0 0 0-.666 0A1.667 1.667 0 0 1 7 8a.333.333 0 1 0 0 .667 1.667 1.667 0 0 1 1.667 1.666.333.333 0 1 0 .666 0A1.667 1.667 0 0 1 11 8.667a.333.333 0 0 0 .236-.098Zm5.916 4.869a.619.619 0 0 0-.438-1.057 3.095 3.095 0 0 1-3.095-3.095.619.619 0 1 0-1.238 0 3.095 3.095 0 0 1-3.095 3.095.619.619 0 1 0 0 1.238 3.095 3.095 0 0 1 3.095 3.095.619.619 0 1 0 1.238 0 3.095 3.095 0 0 1 3.095-3.095.62.62 0 0 0 .438-.181Z\" fill=\"#fff\" /></svg>;\nconst Memo = memo(SvgAi);\nexport { Memo as ReactComponent };", "import 'src/RequestView/RequestView.css.ts.vanilla.css?source=#H4sIAAAAAAAAA5VSQY7bMAy87yt0KZAcWMhJ0G2VS35i0LJsC5FFVaJjL4r8vYittOu2QL03e8gZUsO5OHwzUXDlADT1gbzxnM4vl3_i4seLEJ8Zq8FhOdgSbak75LIs2NqKv8m5QYjapuDwTYnGmek8Q48vqG00mi15JTS5ofdLrcWgRPElzK33_4xQnninHCYG3VlX7_PMHmNrPVTETP1muWLNdqZhJY6HTdxD5gZKdnlUNA7Z3swG8jGTG_KsxA3jDmB2-wEkgIQ-QTLRNgC9qe3QQ3FaqvvFNWeYTYQUUFvffkBjTcxqbCYGjuhTQ7H_gNqauH937TbSqERxzgZPMNqaOyU0Or0rpPwkQBRfw5Q5dDOxcTTCGB95qKLBK4wU6w1unv4Mnif_6woXTZ7R-kee_1a4Bf36_SrFrrf-ueGrlGF6BmvD2PcZwCqRG9icc4UpKCGff0vA4JjTudq5cqSvTzRvcjj9buyMbTteY5ocxdW1ZiQBoNbGM0AhZTb4Pvtx_wn-4eym8wMAAA';\nexport var answer = 'tabula_ui_ai_chat__1tiibt92';\nexport var answerBody = 'tabula_ui_ai_chat__1tiibt93';\nexport var answerIcon = 'tabula_ui_ai_chat__1tiibt94';\nexport var prompt = 'tabula_ui_ai_chat__1tiibt91';\nexport var root = 'tabula_ui_ai_chat__1tiibt90';", "import { ReactNode, useEffect, useMemo } from 'react';\n\nimport { clsx } from 'clsx/lite';\n\nimport * as styles from './AnswerView.css';\n\nimport { Request, TableAction } from '../types';\n\nimport { render, unregisterActions } from './AnswerView.helpers';\n\ntype Props = {\n  className?: string;\n  pendingPlaceholder?: string;\n  request: Request;\n  tableActions: TableAction[];\n};\n\nexport function AnswerView({\n  className,\n  pendingPlaceholder = 'Analyzing...',\n  request,\n  tableActions,\n}: Props): ReactNode {\n  const content = useMemo(() => {\n    if (request.id == null) {\n      return null;\n    }\n\n    return render(request.id, request.answer, tableActions);\n  }, [request.id, request.answer, tableActions]);\n\n  useEffect(\n    () => () => {\n      if (request.id == null) {\n        return;\n      }\n\n      unregisterActions(request.id);\n    },\n    [request.id],\n  );\n\n  if (content == null) {\n    return <div className={clsx(styles.placeholder, className)}>{pendingPlaceholder}</div>;\n  }\n\n  return (\n    // eslint-disable-next-line react/no-danger\n    <div className={className} dangerouslySetInnerHTML={{ __html: content }} />\n  );\n}\n\nif (import.meta.env.DEV) {\n  AnswerView.displayName = 'ui-ai-chat(AnswerView)';\n}\n", "import 'src/AnswerView/AnswerView.css.ts.vanilla.css?source=#H4sIAAAAAAAAA61W227bMAx971fosQHGIfbSbVBeui8JFIm2tcmSQVFNsqH_PvjW2m3SOt2eLJDm8eEhTereqROS4L0D0KFugkfPcXtzf9Yu_twI8ZnVPjm1S3an7E5Xine7LL_Ls6-_190LQujgAknxoOgWYMBwgWL79IyeARqnNFbBGaTV9kaIx7eRswE5PCAVLhzgKEXUFJxbEJwPwcbGxqmTFIXD47YztScwllCzDV62zFPte9_BGq6kKCyPtHv7PpBBkiJrjiIGZ825RD0mJuUAfmTr1TQOSBmbohRZ3gwkxqSkqKwx6BelJA8VEt5y9UmwWQ0ZLqLGau8QYKCj0bk4Z6iDc6qJ2MnRnRYx4mpgUQTPs-q3hggQlY8QkWwBELG2sA_OQJb3LwwcHDIjQWyUtr68DmYeOwAyHhmYlI9FoPo6wHnsANgoYzpq3_sCvi-MeUeYOvjQkkYAwjI5RdercgHjg5JcQHtbj01zFNl6qSgVKiOYZGEpMujKOvNWUwOHRgof_MJmJOnUItx9YA71FdBzsBn_GbDDgj8OO2E_QyVbVsthv1wefaVqnlpYiFpRaX0v8kvjqFC-WVTbzRVjoEZjU_1vM2CC8R8GwATtbLcvWCIUDr3jZ4psi9O4PqTQ6BmpdypnSw-WsY5zR4V9iUe5J3_YerI1Xs_6jmqj6MWmOrNx9kr_Kikkb85u6efl9W3IeslGJ1srOo0BiWIb0QT7nNmhsoxddbDt4AOppnek2FYNHepJa4s-IduLOvm0SaRaI0DR_iSQraZeVNH6EiCy8kaRaZkFkzTbB1xy1djIIugUxwtHYmc9QuSTQ9kLvZ15LkvztE49U-i6TacI-WoeH4oiIkuxXsStai8L40RYWsXhCvIuuOpEuhr9bvW6XM_z6fEv_DzscmQKAAA';\nexport var action = 'tabula_ui_ai_chat__125216z4';\nexport var actions = 'tabula_ui_ai_chat__125216z3';\nexport var placeholder = 'tabula_ui_ai_chat__125216z0';\nexport var tableContainer = 'tabula_ui_ai_chat__125216z2';\nexport var tableScroll = 'tabula_ui_ai_chat__125216z1';", "import DOMPurify from 'dompurify';\nimport { xxHash32 } from 'js-xxhash';\nimport { Marked, Tokens } from 'marked';\n\nimport * as styles from './AnswerView.css';\n\nimport { TableAction, TableData } from '../types';\n\n// region Actions\n\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n  interface Window {\n    UI_AI_CHAT_TABLE_ACTIONS: Map<string, () => void>;\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nwindow.UI_AI_CHAT_TABLE_ACTIONS = window.UI_AI_CHAT_TABLE_ACTIONS || new Map();\n\nfunction hashOf(table: TableData): string {\n  return xxHash32(JSON.stringify(table)).toString(16);\n}\n\nfunction registerActions(id: number, table: TableData, actions: TableAction[]): string[][] {\n  const prefix = `${id}__${hashOf(table)}`;\n\n  const vtable: string[][] = [];\n\n  for (const [idx, { label, action }] of actions.entries()) {\n    const key = `${prefix}__${idx}`;\n\n    const call = `window.UI_AI_CHAT_TABLE_ACTIONS.get('${key}')?.()`;\n\n    window.UI_AI_CHAT_TABLE_ACTIONS.set(key, () => {\n      action(table);\n    });\n\n    vtable.push([label, call]);\n  }\n\n  return vtable;\n}\n\nexport function unregisterActions(id: number): void {\n  for (const [key] of window.UI_AI_CHAT_TABLE_ACTIONS.entries()) {\n    if (!key.startsWith(`${id}__`)) {\n      return;\n    }\n\n    window.UI_AI_CHAT_TABLE_ACTIONS.delete(key);\n  }\n}\n\nfunction renderActions(id: number, table: TableData, actions: TableAction[]): string {\n  const vtable = registerActions(id, table, actions);\n\n  const items = vtable\n    .map(\n      ([label, call]) => `\n        <button class=\"${styles.action}\" onclick=\"${call}\" type=\"button\">${label}</button>\n    `,\n    )\n    .join('');\n\n  return `<div class=\"${styles.actions}\">${items}</div>`;\n}\n\n// endregion Actions\n\n// region Table\n\nfunction renderHead(data: string[]): string {\n  const cells = data.map((it) => `<th>${it}</th>`).join('');\n\n  return `<thead><tr>${cells}</tr></thead>`;\n}\n\nfunction renderBody(data: string[][]): string {\n  const rows = data\n    .map((row) => {\n      const cells = row.map((it) => `<td>${it}</td>`).join('');\n\n      return `<tr>${cells}</tr>`;\n    })\n    .join('');\n\n  return `<tbody>${rows}</tbody>`;\n}\n\nfunction renderTable(table: TableData): string {\n  return `\n    <div class=\"${styles.tableScroll}\">\n      <div class=\"${styles.tableContainer}\">\n        <table>\n          ${renderHead(table.header)}\n          ${renderBody(table.rows)}\n        </table>\n      </div>\n    </div>\n  `;\n}\n\n// endregion Table\n\n// region Render\n\nexport function render(id: number, input: string, tableActions: TableAction[]): string {\n  const parser = new Marked({\n    async: false,\n\n    renderer: {\n      table({ header, rows }: Tokens.Table): string {\n        const table: TableData = {\n          header: header.map((h) => h.text),\n          rows: rows.map((row) => row.map((v) => v.text)),\n        };\n\n        return `${renderTable(table)}${renderActions(id, table, tableActions)}`;\n      },\n    },\n  });\n\n  const output = parser.parse(input, { async: false });\n\n  return DOMPurify.sanitize(output);\n}\n\n// endregion Render\n\n// region DOMPurify\n\nconst allowedOnClickContent = /^window\\.UI_AI_CHAT_TABLE_ACTIONS\\.get\\('\\d+__\\w+__\\d+'\\)\\?\\.\\(\\)$/;\n\nDOMPurify.addHook('uponSanitizeAttribute', (_, data) => {\n  if (data.attrName === 'onclick' && allowedOnClickContent.test(data.attrValue)) {\n    data.forceKeepAttr = true;\n  }\n});\n\n// endregion DOMPurify\n", "import { ReactNode, useCallback, useState } from 'react';\n\nimport { clsx } from 'clsx/lite';\n\nimport * as styles from './PromptView.css';\n\nimport { Edit } from './PromptView.Edit';\nimport { Read } from './PromptView.Read';\n\ntype Props = {\n  className?: string;\n\n  id?: number;\n  prompt: string;\n  maxLength?: number;\n\n  isEditable: boolean;\n\n  onResend: (id: number, prompt: string) => void;\n};\n\nexport function PromptView({\n  className,\n  id,\n  isEditable,\n  maxLength,\n  onResend,\n  prompt,\n}: Props): ReactNode {\n  const [isEditing, setIsEditing] = useState(false);\n  const [editInput, setEditInput] = useState(prompt);\n\n  const handleCancel = useCallback(() => {\n    setIsEditing(false);\n\n    setEditInput(prompt);\n  }, [prompt]);\n\n  const handleApply = useCallback(() => {\n    setIsEditing(false);\n\n    if (id != null) {\n      onResend(id, editInput);\n    }\n  }, [editInput, id, onResend]);\n\n  const handleStartEdit = useCallback(() => {\n    setIsEditing(true);\n  }, []);\n\n  return (\n    <div className={clsx(styles.root, className)}>\n      {isEditing ? (\n        <Edit\n          maxLength={maxLength}\n          onApply={handleApply}\n          onCancel={handleCancel}\n          onChange={setEditInput}\n          value={editInput}\n        />\n      ) : (\n        <Read isEditable={isEditable && id != null} onStartEdit={handleStartEdit} prompt={prompt} />\n      )}\n    </div>\n  );\n}\n\nif (import.meta.env.DEV) {\n  PromptView.displayName = 'ui-ai-chat(PromptView)';\n}\n", "import 'src/PromptView/PromptView.css.ts.vanilla.css?source=#H4sIAAAAAAAAA9VUy47bMAy871foUqB7YBGn25f3sn8SMBIdq6uIhkjlgcX-e2FbeRjdJlkUPfRmkZoRyRnzKeCektFlALC87jhSVHm8e3ozbl7ujPmkuMwBF9kv0C9si7pY7EL3_KOthrwxDUetzQbTR4CBoQ8IgGAUEEq-AViT83kN1cOYvX8ckIFUKYF0aH1cvYNjCixsSjsFTRil4bR-B9sUWNg6Fq-eY20SBVS_oRJH54Ziv3c7U33tdmN4yclRgoTOZ6lNNT8m0D6vEufowHLgNKlriAjA2SWwHDVxEHCk6IOUev4M7gEUFaBLfo1pXwDb1isNI6LadIlgm7DrU68XVZ0XVU_941I4ZC39K3e1-XboLvlVq2fnrXfa1mb-cAi0NN44RY4DnI1n56ULuK9NE6hc6b_A-US2KMDbMfEzi_pmf2i5NpaiUhqTGPwqgldayzQxalObyJFuVusf6qSU1J-EsjlJD-nYn2qeqBf5oJ0xWXrjUyCr5x0N9i2Cnb3tcsI-CNCgKEB1f54lFB9XAKIYHSbXW4hdtr3bS3Hc_2K6P6rFWYOPBEXo2XVDVXXLG0o3WO74VvXmW0WkK_atG7ZZDoyFQXQfqDbCwbsp94V_cvRIkbnfITYLzO-neG4aIb1pEPMyiJdbfSJkuddlNMo1chxku519ui3O_XNw1eUXP_-2KP7LRXm5yYfSZLFgNZt9uA76UkB_tdmGmxTdld22wm6Y8FjV6y9of5Ud4QcAAA';\nexport var controls = 'tabula_ui_ai_chat__xlpk9h5';\nexport var edit = 'tabula_ui_ai_chat__xlpk9h3';\nexport var input = 'tabula_ui_ai_chat__xlpk9h4';\nexport var root = 'tabula_ui_ai_chat__xlpk9h0';\nexport var startEdit = 'tabula_ui_ai_chat__xlpk9h2';\nexport var view = 'tabula_ui_ai_chat__xlpk9h1';", "import { ReactNode, useEffect, useRef } from 'react';\n\nimport { UiButton24 } from '@tabula/ui-button';\n\nimport { ReactComponent as CheckedIcon } from './assets/checked.svg';\n\nimport * as styles from './PromptView.css';\n\nimport { TextArea } from '../TextArea';\n\ntype Props = {\n  maxLength?: number;\n  onChange: (value: string) => void;\n  onApply: () => void;\n  onCancel: () => void;\n  value: string;\n};\n\nexport function Edit({ onApply, maxLength, onChange, onCancel, value }: Props): ReactNode {\n  const ref = useRef<HTMLTextAreaElement>(null);\n\n  useEffect(() => {\n    ref.current?.select();\n  }, []);\n\n  return (\n    <div className={styles.edit}>\n      <TextArea\n        className={styles.input}\n        maxLength={maxLength}\n        onChange={onChange}\n        onEnter={onApply}\n        onEscape={onCancel}\n        ref={ref}\n        value={value}\n      />\n      <div className={styles.controls}>\n        <UiButton24 onClick={onCancel} variant=\"cancel\">\n          Cancel\n        </UiButton24>\n        <UiButton24 icon={CheckedIcon} onClick={onApply} variant=\"primary\">\n          Apply\n        </UiButton24>\n      </div>\n    </div>\n  );\n}\n\nif (import.meta.env.DEV) {\n  Edit.displayName = 'ui-ai-chat(PromptView.Edit)';\n}\n", "import svgUrl from \"ni:svgr;amfC3CqoYVxYy4Ek7ZNsERUGSk_DDExU1IZuGq_3wIk\";\nexport default svgUrl;\nimport * as React from \"react\";\nimport { memo } from \"react\";\nconst SvgChecked = props => <svg width={16} height={16} viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" {...props}><path clipRule=\"evenodd\" fill=\"currentColor\" fillRule=\"evenodd\" d=\"M12.48 4.424a.75.75 0 0 1 .096 1.056l-5 6a.75.75 0 0 1-1.106.05l-3-3a.75.75 0 0 1 1.06-1.06l2.42 2.419 4.474-5.37a.75.75 0 0 1 1.056-.095Z\" /></svg>;\nconst Memo = memo(SvgChecked);\nexport { Memo as ReactComponent };", "import { ChangeEventHandler, KeyboardEventHandler, forwardRef, useCallback } from 'react';\n\nimport clsx from 'clsx';\nimport BaseTextArea from 'react-textarea-autosize';\n\nimport * as styles from './TextArea.css';\n\nexport const MIN_VISIBLE_ROWS_COUNT = 1;\nexport const MAX_VISIBLE_ROWS_COUNT = 10;\n\nexport type Props = {\n  className?: string;\n  maxLength?: number;\n  onChange: (value: string) => void;\n  onEnter?: () => void;\n  onEscape?: () => void;\n  placeholder?: string;\n  value: string;\n};\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, Props>(\n  ({ className, maxLength, onChange, onEnter, onEscape, placeholder, value }, ref) => {\n    const handleKeyDown = useCallback<KeyboardEventHandler<HTMLTextAreaElement>>(\n      (event) => {\n        if (event.shiftKey) {\n          return;\n        }\n\n        if (event.key === 'Enter' && onEnter != null) {\n          event.preventDefault();\n\n          onEnter();\n        } else if (event.key === 'Escape' && onEscape != null) {\n          event.preventDefault();\n\n          onEscape();\n        }\n      },\n      [onEnter, onEscape],\n    );\n\n    const handleChange = useCallback<ChangeEventHandler<HTMLTextAreaElement>>(\n      (event) => {\n        onChange(event.target.value);\n      },\n      [onChange],\n    );\n\n    return (\n      <BaseTextArea\n        className={clsx(styles.root, className, 'input-root')}\n        maxLength={maxLength}\n        maxRows={MAX_VISIBLE_ROWS_COUNT}\n        minRows={MIN_VISIBLE_ROWS_COUNT}\n        onChange={handleChange}\n        onKeyDown={handleKeyDown}\n        placeholder={placeholder}\n        ref={ref}\n        value={value}\n      />\n    );\n  },\n);\n\nif (import.meta.env.DEV) {\n  TextArea.displayName = 'ui-ai-chat(TextArea)';\n}\n", "import 'src/TextArea/TextArea.css.ts.vanilla.css?source=QGxheWVyIHRibC0tY29tcG9uZW50czsKQGxheWVyIHRibC0tY29tcG9uZW50cyB7CiAgLnRhYnVsYV91aV9haV9jaGF0X19jdHFhMW0wIHsKICAgIGZvbnQ6IHZhcigtLXRibC0tZm9udHMtLXNhbnMtc2VyaWYtLW1lZGl1bS0xNC0tZm9udCk7CiAgICBsZXR0ZXItc3BhY2luZzogdmFyKC0tdGJsLS1mb250cy0tc2Fucy1zZXJpZi0tbWVkaXVtLTE0LS1sZXR0ZXItc3BhY2luZyk7CiAgICB0ZXh0LXRyYW5zZm9ybTogdmFyKC0tdGJsLS1mb250cy0tc2Fucy1zZXJpZi0tbWVkaXVtLTE0LS10ZXh0LXRyYW5zZm9ybSk7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS10YmwtLWNvbG9ycy0tY29udGVudC0tcHJpbWFyeSk7CiAgICByZXNpemU6IG5vbmU7CiAgfQogIC50YWJ1bGFfdWlfYWlfY2hhdF9fY3RxYTFtMDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgZGlzcGxheTogbm9uZTsKICB9CiAgLnRhYnVsYV91aV9haV9jaGF0X19jdHFhMW0wOmZvY3VzIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQogIC50YWJ1bGFfdWlfYWlfY2hhdF9fY3RxYTFtMDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IHZhcigtLXRibC0tY29sb3JzLS1jb250ZW50LS10ZXJ0aWFyeSk7CiAgfQp9';\nexport var root = 'tabula_ui_ai_chat__ctqa1m0';", "import svgUrl from \"ni:svgr;Rd8z0vZzxN5jK_bDH-0jgbTyOUapSSGQ05ODcuwblqE\";\nexport default svgUrl;\nimport * as React from \"react\";\nimport { memo } from \"react\";\nconst SvgEdit = props => <svg width={16} height={16} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M7.646 4.353 8 4l.354-.354 1.439-1.439a1 1 0 0 1 1.414 0l2.586 2.586a1 1 0 0 1 0 1.414l-1.44 1.44L12 8l-.354.353-5.353 5.35a1 1 0 0 1-.707.293H3a1 1 0 0 1-1-1v-2.582a1 1 0 0 1 .293-.707l5.353-5.354Zm4 2.586 1.44-1.44L10.5 2.915l-1.44 1.44 2.586 2.585ZM8.354 5.061l2.585 2.585-5.353 5.35H3v-2.582l5.354-5.353Z\" fill=\"currentColor\" /></svg>;\nconst Memo = memo(SvgEdit);\nexport { Memo as ReactComponent };", "import { ReactNode } from 'react';\n\nimport { ReactComponent as EditIcon } from './assets/edit.svg';\n\nimport * as styles from './PromptView.css';\n\ntype Props = {\n  isEditable: boolean;\n\n  onStartEdit: () => void;\n\n  prompt: string;\n};\n\nexport function Read({ isEditable, onStartEdit, prompt }: Props): ReactNode {\n  return (\n    <div className={styles.view}>\n      {isEditable && (\n        <button className={styles.startEdit} onClick={onStartEdit} title=\"Edit\" type=\"button\">\n          <EditIcon />\n        </button>\n      )}\n      {prompt}\n    </div>\n  );\n}\n\nif (import.meta.env.DEV) {\n  Read.displayName = 'ui-ai-chat(PromptView.Read)';\n}\n", "import { ReactNode } from 'react';\n\nimport { ReactComponent as AiIcon } from './assets/ai.svg';\n\nimport * as styles from './RequestView.css';\n\nimport { AnswerView } from '../AnswerView';\nimport { PromptView } from '../PromptView';\nimport { Request, TableAction } from '../types';\n\ntype Props = {\n  editDisabled: boolean;\n  maxPromptLength?: number;\n  onResend: (id: number, prompt: string) => void;\n  pendingPlaceholder?: string;\n  request: Request;\n  tableActions: TableAction[];\n};\n\nexport function RequestView({\n  editDisabled,\n  maxPromptLength,\n  onResend,\n  pendingPlaceholder,\n  request,\n  tableActions,\n}: Props): ReactNode {\n  return (\n    <div className={styles.root}>\n      <PromptView\n        className={styles.prompt}\n        id={request.id}\n        isEditable={!editDisabled}\n        maxLength={maxPromptLength}\n        onResend={onResend}\n        prompt={request.prompt}\n      />\n      <div className={styles.answer}>\n        <AiIcon className={styles.answerIcon} />\n        <AnswerView\n          className={styles.answerBody}\n          pendingPlaceholder={pendingPlaceholder}\n          request={request}\n          tableActions={tableActions}\n        />\n      </div>\n    </div>\n  );\n}\n\nif (import.meta.env.DEV) {\n  RequestView.displayName = 'ui-ai-chat(RequestView)';\n}\n", "import { Ref, RefObject, useImperativeHandle, useRef } from 'react';\n\nimport { InternalConversationController } from '../types';\n\nexport function useController(\n  ref: Ref<InternalConversationController>,\n): RefObject<HTMLDivElement | null> {\n  const conversationRef = useRef<HTMLDivElement>(null);\n\n  useImperativeHandle(\n    ref,\n    () => ({\n      get hasTextArea(): boolean {\n        const { current: conversation } = conversationRef;\n\n        if (conversation == null) {\n          return false;\n        }\n\n        return conversation.querySelector('textarea') != null;\n      },\n\n      scrollToTop: (behavior?: ScrollBehavior) => {\n        const { current: conversation } = conversationRef;\n\n        if (conversation == null) {\n          return;\n        }\n\n        conversation.scrollTo({ left: 0, top: 0, behavior });\n      },\n\n      scrollToBottom: (behavior?: ScrollBehavior) => {\n        const { current: conversation } = conversationRef;\n\n        if (conversation == null) {\n          return;\n        }\n\n        conversation.scrollTo({ left: 0, top: conversation.scrollHeight, behavior });\n      },\n    }),\n    [],\n  );\n\n  return conversationRef;\n}\n", "import { forwardRef } from 'react';\n\nimport * as styles from './Prompt.css';\n\nimport { PromptContext } from '../PromptContext';\nimport { PromptInput } from '../PromptInput';\nimport { PromptInputController } from '../types';\n\ntype Props = {\n  context?: string;\n  isSendable: boolean;\n  isSending: boolean;\n  maxLength?: number;\n  onChangePrompt: (nextValue: string) => void;\n  onClearContext?: () => void;\n  onSend: () => void;\n  placeholder: string;\n  prompt: string;\n};\n\nexport const Prompt = forwardRef<PromptInputController, Props>(\n  (\n    {\n      context,\n      isSendable,\n      isSending,\n      maxLength,\n      onChangePrompt,\n      onClearContext,\n      onSend,\n      placeholder,\n      prompt,\n    },\n    ref,\n  ) => (\n    <div className={styles.root}>\n      {context != null && context.trim().length > 0 && (\n        <PromptContext className={styles.context} onClear={onClearContext} value={context} />\n      )}\n      <PromptInput\n        className={styles.input}\n        isSendable={isSendable}\n        isSending={isSending}\n        maxLength={maxLength}\n        onChange={onChangePrompt}\n        onSend={onSend}\n        placeholder={placeholder}\n        ref={ref}\n        value={prompt}\n      />\n    </div>\n  ),\n);\n\nif (import.meta.env.DEV) {\n  Prompt.displayName = 'ui-ai-chat(Prompt)';\n}\n", "import 'src/Prompt/Prompt.css.ts.vanilla.css?source=QGxheWVyIHRibC0tY29tcG9uZW50czsKQGxheWVyIHRibC0tY29tcG9uZW50cyB7CiAgLnRhYnVsYV91aV9haV9jaGF0X183bnRvN28wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgcGFkZGluZzogMCAxNnB4IDE2cHg7CiAgfQogIC50YWJ1bGFfdWlfYWlfY2hhdF9fN250bzdvMSB7CiAgICBib3JkZXItcmFkaXVzOiAxNnB4IDE2cHggMCAwOwogIH0KICAudGFidWxhX3VpX2FpX2NoYXRfXzdudG83bzIgewogICAgYm9yZGVyLXJhZGl1czogMCAwIDE2cHggMTZweDsKICB9CiAgLnRhYnVsYV91aV9haV9jaGF0X183bnRvN28yOmZpcnN0LWNoaWxkIHsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgfQogIEBjb250YWluZXIgdGFidWxhX3VpX2FpX2NoYXRfX3ZwYzdxazAgKG1pbi13aWR0aDogNzAwcHgpIHsKICAgIC50YWJ1bGFfdWlfYWlfY2hhdF9fN250bzdvMCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KGF1dG8sIDEwMDBweCk7CiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBhdXRvOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgcGFkZGluZzogMCA2OHB4IDE2cHg7CiAgICB9CiAgfQp9';\nexport var context = 'tabula_ui_ai_chat__7nto7o1';\nexport var input = 'tabula_ui_ai_chat__7nto7o2';\nexport var root = 'tabula_ui_ai_chat__7nto7o0';", "import { ReactNode } from 'react';\n\nimport { clsx } from 'clsx/lite';\n\nimport { ReactComponent as RefIcon } from './assets/ref.svg';\nimport { ReactComponent as ResetIcon } from './assets/reset.svg';\n\nimport * as styles from './PromptContext.css';\n\ntype Props = {\n  className?: string;\n\n  onClear?: () => void;\n\n  value: string;\n};\n\nexport function PromptContext({ className, onClear, value }: Props): ReactNode {\n  return (\n    <div className={clsx(styles.root, className)}>\n      <RefIcon className={styles.icon} />\n      <div className={styles.context}>{value}</div>\n      {onClear != null && (\n        <button className={styles.reset} onClick={onClear} title=\"Clear context\" type=\"button\">\n          <ResetIcon />\n        </button>\n      )}\n    </div>\n  );\n}\n\nif (import.meta.env.DEV) {\n  PromptContext.displayName = 'ui-ai-chat(PromptContext)';\n}\n", "import svgUrl from \"ni:svgr;x-vdHdEaVMuEIOGS_nzYlsPZ4V4G6CCDoefyUuPfa6g\";\nexport default svgUrl;\nimport * as React from \"react\";\nimport { memo } from \"react\";\nconst SvgRef = props => <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M3 4v1a3 3 0 0 0 3 3h8m0 0-4-4m4 4-4 4\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>;\nconst Memo = memo(SvgRef);\nexport { Memo as ReactComponent };", "import svgUrl from \"ni:svgr;LPTODUPcStoHefqUlCcWFkayqQfCD-LnfXLKewQPVyQ\";\nexport default svgUrl;\nimport * as React from \"react\";\nimport { memo } from \"react\";\nconst SvgReset = props => <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M3.146 3.146a.5.5 0 0 1 .708 0L8 7.293l4.146-4.147a.5.5 0 0 1 .708.708L8.707 8l4.147 4.146a.5.5 0 0 1-.708.708L8 8.707l-4.146 4.147a.5.5 0 0 1-.708-.708L7.293 8 3.146 3.854a.5.5 0 0 1 0-.708Z\" fill=\"currentColor\" /></svg>;\nconst Memo = memo(SvgReset);\nexport { Memo as ReactComponent };", "import 'src/PromptContext/PromptContext.css.ts.vanilla.css?source=#H4sIAAAAAAAAA5VTy27jMAy89yt0bA5cxEkXWCiX_klAW3SijSK5JN02WPTfF7LlJtlH4l4EiRSHj-E8BzwRG60DQJOOXYoUVTYPz_-0m18PxnxTrPuA295v0W-bPep2e6ilO7wsB78xbYpqzSvyI8CAkA0CIBgFhNi3AEJHD3UKDqrV-GGxGYIDqRKDdNj4uPsazHVsAVR6V1DGKG3i49cAr2MLYJfEq0_RGqaA6l9ptNeJHbE16-7dSAreXaZqUkgsADU2hx2nPrpsi8opCDhS9EEK_sWXIcrew-nYH5FPAx59DvL_sdg0FBWgWi6Hvx83Wa0Kq-e2sZYUei1ta-qsqarufeKvVWuq9fi-Db2aA_1jQma_2-vF23npAp6saQMVU76B80xNISi9jY6fvahvP0dkTZ4A8ejE4HcRvNJRrh1v3unemtXTlHJPYw1nS4fODXu6vF6CmCL9Sac1wyp1yBT1Hkml0ryDrB75NNHas-SQLvlzoQPuNMIQLvFcz5gdAC1KJn1x6SUUH3cAohgd8rBMyfVN3uoZu7Gy-_RKXGic0YxQk3Ki0yzwNjW9FPDUa_CRQPQUyI4C21x5bohlIGXSW9Z90wusFtfxqW2FtDB5rzQcRjS_8aLRxd98TZtyO-O6pDoi73wcBWeqZT7ybf19jt6Wdo_yeKOtxewKoKhx_TQl_vgNCLEa_UwGAAA';\nexport var context = 'tabula_ui_ai_chat__kbspkq3';\nexport var icon = 'tabula_ui_ai_chat__kbspkq1';\nexport var reset = 'tabula_ui_ai_chat__kbspkq2';\nexport var root = 'tabula_ui_ai_chat__kbspkq0';", "import { forwardRef } from 'react';\n\nimport clsx from 'clsx';\n\nimport { ReactComponent as SendIcon } from './assets/send.svg';\nimport { ReactComponent as SendingIcon } from './assets/sending.svg';\n\nimport * as styles from './PromptInput.css';\n\nimport { TextArea } from '../TextArea';\nimport { PromptInputController } from '../types';\n\nimport { useController } from './PromptInput.hooks';\n\ntype Props = {\n  className?: string;\n  isSendable: boolean;\n  isSending: boolean;\n  maxLength?: number;\n  onChange: (nextValue: string) => void;\n  onSend: () => void;\n  placeholder: string;\n  value: string;\n};\n\nexport const PromptInput = forwardRef<PromptInputController, Props>(\n  ({ className, isSendable, isSending, maxLength, onChange, onSend, placeholder, value }, ref) => {\n    const inputRef = useController(ref);\n\n    const isAllowToSend = isSendable && !isSending;\n\n    return (\n      <div className={clsx(styles.root, isSending && styles.isSending, className)}>\n        <TextArea\n          className={styles.input}\n          maxLength={maxLength}\n          onChange={onChange}\n          onEnter={onSend}\n          placeholder={placeholder}\n          ref={inputRef}\n          value={value}\n        />\n        <button\n          className={styles.send}\n          disabled={!isAllowToSend}\n          onClick={onSend}\n          title=\"Send\"\n          type=\"button\"\n        >\n          {isSending ? <SendingIcon /> : <SendIcon />}\n        </button>\n      </div>\n    );\n  },\n);\n\nif (import.meta.env.DEV) {\n  PromptInput.displayName = 'ui-ai-chat(PromptInput)';\n}\n", "import svgUrl from \"ni:svgr;_2QSHTD1zzljSv13aQn2dyFWZy7umDm7lKBOVRbvWfs\";\nexport default svgUrl;\nimport * as React from \"react\";\nimport { memo } from \"react\";\nconst SvgSend = props => <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M7.826 1.71a1 1 0 0 1 1.223 0l4.063 3.142a1 1 0 1 1-1.224 1.582l-2.45-1.896V13.5a1 1 0 1 1-2 0V4.538L4.987 6.434a1 1 0 0 1-1.224-1.582l4.063-3.143Z\" fill=\"currentColor\" /></svg>;\nconst Memo = memo(SvgSend);\nexport { Memo as ReactComponent };", "import svgUrl from \"ni:svgr;75cojXrHUW9oPuuQJMnxK8irWyE0F3UgOObahbKwLnA\";\nexport default svgUrl;\nimport * as React from \"react\";\nimport { memo } from \"react\";\nconst SvgSending = props => <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M8 14a6 6 0 1 1 6-6h1a7 7 0 1 0-7 7v-1Z\" fill=\"currentColor\"><animateTransform attributeName=\"transform\" attributeType=\"XML\" type=\"rotate\" from=\"0 8 8\" to=\"360 8 8\" dur=\"700ms\" repeatCount=\"indefinite\" /></path></svg>;\nconst Memo = memo(SvgSending);\nexport { Memo as ReactComponent };", "import 'src/PromptInput/PromptInput.css.ts.vanilla.css?source=#H4sIAAAAAAAAA8VVzW7bMAy-9yl0TIBxsNNubdVL3ySgLdrRqoiaRKcNhrz74FhOvTZp2mLDbgYp0t8PJd473FJUUjmAmteBPXlJdxf3R-Pq14VSXwWrzuGys0u0y3qFslze3tJVa4t9XiljU3C41apx9HS3D_VfYGykWix7rSI_DokfXRLbbKFmL-RFqxSwJqhIHon8cAadbT1YoXXSqiYvFIdEi0Grm5D_EdAY69tJpML6oY3ceQM1O45abTDOADItxzEBTA7tUUR2CQwJWpfmfZ_d26S1Z5npxsYkUK-sM_MsQ8YDwkGrqwHT270WubJXS6tSlQo74fN1l3_UFao41I3iJXLN4AeQN3enbHrlxlTtkzY8WiMrrS4Xo-4rsu1KppGKo6GolWdP0whENLZLWpXfX5umlbOeMELbnyIvM2FVsQivvxxzsrHOjRYCoAVoIq_n7zwrPJ8PCE7PStYlDwomGSu6mPqSwPZZFonokx3mHZ2b9jNdxD4B0GASgHI-zRKmfm4gCXqD0QCEyKarxW7oHRN5qRuuu5RngjvpVdRqEZ5UYmfN0UswuHEQZN8BFple7gHcNIlEq-I9IFa8oZhB_EVPQ7RrjFvYt_-Qwy8qR7_P8cC97v-OSIiUEplPUTnUPg_vdOrG23aOorEJK0fmCMkjaDx1EtEBlN-KF_NvqMHOyfl_lp_F8z9ehJ7KfZ9B6_ul-Br4JtTXPx8KNVtbD_k5vC6K8DTugvNLM2-z8vBkThbac3B3rtvJbfRiH91MO-4udr8BdVdaygkIAAA';\nexport var input = 'tabula_ui_ai_chat__99e4gi2';\nexport var isSending = 'tabula_ui_ai_chat__99e4gi1';\nexport var root = 'tabula_ui_ai_chat__99e4gi0';\nexport var send = 'tabula_ui_ai_chat__99e4gi3';", "import { Ref, RefObject, useImperativeHandle, useRef } from 'react';\n\nimport { PromptInputController } from '../types';\n\nexport function useController(\n  ref: Ref<PromptInputController>,\n): RefObject<HTMLTextAreaElement | null> {\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n\n  useImperativeHandle(\n    ref,\n    () => ({\n      focus: () => {\n        inputRef.current?.focus();\n      },\n\n      blur: () => {\n        inputRef.current?.blur();\n      },\n\n      select: () => {\n        inputRef.current?.select();\n      },\n    }),\n    [],\n  );\n\n  return inputRef;\n}\n", "import { ReactNode } from 'react';\n\nimport { clsx } from 'clsx/lite';\n\nimport * as styles from './Suggestions.css';\n\nimport { Item } from './Suggestions.Item';\n\ntype Props = {\n  className?: string;\n\n  suggestions: string[];\n\n  onSuggest: (suggestion: string) => void;\n};\n\nexport function Suggestions({ className, suggestions, onSuggest }: Props): ReactNode {\n  return (\n    <div className={clsx(styles.root, className)}>\n      <div className={styles.items}>\n        {suggestions.map((it, idx) => (\n          // eslint-disable-next-line react/no-array-index-key\n          <Item key={idx} onSuggest={onSuggest} suggestion={it} />\n        ))}\n      </div>\n    </div>\n  );\n}\n\nif (import.meta.env.DEV) {\n  Suggestions.displayName = 'ui-ai-chat(Suggestions)';\n}\n", "import 'src/Suggestions/Suggestions.css.ts.vanilla.css?source=#H4sIAAAAAAAAA5VUy27bMBC85yv2GAPdQvIhDphL-iXGRqQcNhTJLpd-tMi_F6ToQEbS1LkIEpczs5hZ7aOjk2GQJ4c4hCkGb7ykh5vHD8_hzw3Ad6Gn7Gib7Zbsdngm2W5P97_7velqHSCS1tbvFHTQ38Xjww3A66fAvgG1TdHRScHoTIVBfUNt2Qxig1fA4TAXfuYkdjzhELwYLzMGkxDLAnlgigrKcz7clc_7a3pat57GUMj3xLeI1Y5ykBAT-YTJsB0RJ6NtnrBfz9XVrOWMiGFMkYbqxtUcl8DGJuYoKEw-jYGnL7BdAhvbW0SbeIS-i83tp8DasII-HiEFZ_VSZggucEL0JguTQ_zRd6slDpm0zUlBv34jpOFlxyF7raD2EImNbwlVQvWRRAsVMbKdiE9LD8jZnVfgzHimyZwKTwzWi-F2tYjZeWbIuaWIzkylgDhSEsR-tawaStbvsEyS18S69BB0HsTuzeqKsVFjGHJqwxOyOOsNJjk5o2ZLHy4q__ageVqs4FBTHnLC9eoSH8YxGVHQXdPac9gbbq0tk_k05M1lxtc3XNWusoyqu19trE1fIX8somR9WVnvZfZx2Px66eB2sh4PVsuzgk3XxeOqSf5_pS12047PGUJ9RzFTdCQ1yzz5pGCyfqLjLWUJ36DvqtTHEA6HpKBcrI_zpXfLrewCg1RtOV9arNm7-_MP91odef0LaSCKp9gFAAA';\nexport var item = 'tabula_ui_ai_chat__y8z1ve2';\nexport var items = 'tabula_ui_ai_chat__y8z1ve1';\nexport var root = 'tabula_ui_ai_chat__y8z1ve0';", "import { ReactNode, useCallback } from 'react';\n\nimport * as styles from './Suggestions.css';\n\ntype Props = {\n  onSuggest: (suggestion: string) => void;\n\n  suggestion: string;\n};\n\nexport function Item({ onSuggest, suggestion }: Props): ReactNode {\n  const handleClick = useCallback(() => {\n    onSuggest(suggestion);\n  }, [onSuggest, suggestion]);\n\n  return (\n    <button className={styles.item} onClick={handleClick} type=\"button\">\n      {suggestion}\n    </button>\n  );\n}\n\nif (import.meta.env.DEV) {\n  Item.displayName = 'ui-ai-chat(Suggestions.Item)';\n}\n", "import { RefObject, useEffect, useRef } from 'react';\n\nimport { InternalConversationController, Request } from '../../types';\n\nfunction shouldToScroll(previous: Request | null, current: Request | null): boolean {\n  if (current == null) {\n    return false;\n  }\n\n  if (previous == null) {\n    return true;\n  }\n\n  return (\n    previous.id !== current.id ||\n    previous.prompt !== current.prompt ||\n    previous.answer !== current.answer\n  );\n}\n\nexport function useAutoScroll(\n  conversation: Request[],\n  conversationRef: RefObject<InternalConversationController | null>,\n): void {\n  const lastRef = useRef<Request | null>(null);\n\n  useEffect(() => {\n    if (conversationRef.current == null) {\n      return;\n    }\n\n    const { current: previous } = lastRef;\n    const current = conversation.at(-1) ?? null;\n\n    if (shouldToScroll(previous, current) && !conversationRef.current.hasTextArea) {\n      conversationRef.current.scrollToBottom();\n    }\n\n    lastRef.current = current;\n  }, [conversation, conversationRef]);\n\n  // NOTE: We should scroll to bottom only on at initial render.\n  /* eslint-disable react-hooks/exhaustive-deps */\n  useEffect(() => {\n    if (conversation.length > 0) {\n      conversationRef.current?.scrollToBottom();\n    }\n\n    lastRef.current = conversation.at(-1) ?? null;\n  }, []);\n  /* eslint-enable */\n}\n", "import { Ref, RefObject, useImperativeHandle } from 'react';\n\nimport { Controller, ConversationController, PromptInputController } from '../../types';\n\ntype Options = {\n  ref: Ref<Controller>;\n\n  conversationRef: RefObject<ConversationController | null>;\n  promptInputRef: RefObject<PromptInputController | null>;\n};\n\nexport function useController({ ref, conversationRef, promptInputRef }: Options): void {\n  useImperativeHandle(\n    ref,\n    () => ({\n      prompt: {\n        focus: () => {\n          promptInputRef.current?.focus();\n        },\n\n        blur: () => {\n          promptInputRef.current?.blur();\n        },\n\n        select: () => {\n          promptInputRef.current?.select();\n        },\n      },\n\n      conversation: {\n        scrollToTop: (behavior?: ScrollBehavior) => {\n          conversationRef.current?.scrollToTop(behavior);\n        },\n\n        scrollToBottom: (behavior?: ScrollBehavior) => {\n          conversationRef.current?.scrollToBottom(behavior);\n        },\n      },\n    }),\n    [conversationRef, promptInputRef],\n  );\n}\n", "import { RefObject, useCallback, useState } from 'react';\n\nimport { PromptInputController, Request } from '../../types';\n\ntype Options = {\n  conversation: Request[];\n\n  onSend: (prompt: string) => void;\n\n  promptInputRef: RefObject<PromptInputController | null>;\n};\n\ntype Result = {\n  onSend: () => void;\n\n  isPending: boolean;\n  isSendable: boolean;\n\n  prompt: string;\n  onChangePrompt: (prompt: string) => void;\n\n  onSuggest: (suggestion: string) => void;\n};\n\nexport function usePrompt({ conversation, promptInputRef, onSend }: Options): Result {\n  const [prompt, setPrompt] = useState('');\n\n  const isPending = conversation.some((it) => it.id == null);\n  const isSendable = !isPending && prompt.trim().length > 0;\n\n  const handleSend = useCallback(() => {\n    if (isPending || !isSendable) {\n      return;\n    }\n\n    onSend(prompt);\n\n    setPrompt('');\n\n    promptInputRef.current?.focus();\n  }, [isPending, isSendable, onSend, prompt, promptInputRef]);\n\n  const handleSuggest = useCallback(\n    (suggestion: string) => {\n      setPrompt(suggestion);\n\n      promptInputRef.current?.focus();\n    },\n    [promptInputRef],\n  );\n\n  return {\n    onSend: handleSend,\n\n    isPending,\n    isSendable,\n\n    prompt,\n    onChangePrompt: setPrompt,\n\n    onSuggest: handleSuggest,\n  };\n}\n"],
  "mappings": "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",
  "names": ["forwardRef", "useRef", "clsx", "forwardRef", "clsx", "root", "root", "placeholder", "actions", "action", "items", "input", "jsx", "placeholder", "useCallback", "clsx", "root", "useEffect", "React", "memo", "jsx", "jsx", "Memo", "memo", "clsx", "root", "jsx", "placeholder", "clsx", "root", "jsx", "jsxs", "useEffect", "Memo", "React", "memo", "jsx", "jsx", "Memo", "memo", "jsx", "jsxs", "prompt", "Memo", "jsx", "prompt", "useCallback", "clsx", "root", "jsx", "jsxs", "root", "useRef", "conversation", "jsx", "forwardRef", "conversation", "clsx", "root", "forwardRef", "input", "root", "clsx", "React", "memo", "jsx", "jsx", "Memo", "memo", "React", "memo", "jsx", "jsx", "Memo", "memo", "context", "root", "jsx", "jsxs", "clsx", "root", "Memo", "context", "forwardRef", "clsx", "React", "memo", "jsx", "jsx", "Memo", "memo", "React", "memo", "jsx", "jsx", "Memo", "memo", "input", "root", "useImperativeHandle", "useRef", "useController", "jsx", "jsxs", "forwardRef", "isSending", "placeholder", "useController", "clsx", "root", "input", "Memo", "jsx", "jsxs", "forwardRef", "context", "isSending", "placeholder", "prompt", "root", "input", "clsx", "root", "useCallback", "jsx", "useCallback", "jsx", "suggestions", "clsx", "root", "useEffect", "useRef", "conversation", "useImperativeHandle", "useController", "useCallback", "useState", "conversation", "prompt", "jsx", "jsxs", "forwardRef", "context", "conversation", "placeholder", "suggestions", "useRef", "useController", "prompt", "clsx"]
}
