Chat Web Search

Карточки веб-поиска и чтения страниц (web_search / web_fetch) с состояниями загрузки, ошибки, пустого результата и списка источников.

Установка

Использование

Convenience-форма <ChatWebSearch> рендерит весь жизненный цикл web_search по одному пропу status. Для тонкой компоновки доступны под-компоненты ChatWebSearchHeader, ChatWebSearchResults, ChatWebSearchResult.

Чтение страниц — отдельные surface'ы той же семьи:

API

Состояния

ChatWebSearch

status: 'working' | 'error' | 'complete' управляет всем рендером:

  • workingSpinner + лейбл («Searching: …» или «Preparing search query…»); контейнер помечен aria-busy + aria-live="polite", чтобы скринридер озвучивал прогресс.
  • error — destructive-карточка с заголовком и причиной; в variant="timeline" — одна inline-строка Search failed · reason.
  • complete + пустой results — карточка/строка «No results for …».
  • complete + результаты — заголовок (запрос + N sources) и инсет-список с фавиконами; cached добавляет подпись.

ChatWebFetch

Тот же status управляет чтением одной страницы:

  • workingSpinner + лейбл («Reading: <domain>» или «Preparing page…»); контейнер помечен aria-busy + aria-live="polite".
  • error — destructive-карточка (Couldn't open · domain); опциональный бейдж errorCode (например HTTP 403) и причина под строкой. В variant="timeline" — inline-строка с приглушённым фавиконом.
  • complete + url — кликабельная карточка-ссылка: фавикон, Read · siteName, дата, бейдж truncated, заголовок страницы. Anchor-атрибуты (rel, download, referrerPolicy) пробрасываются на ссылку.
  • complete без url — карточка/строка «No page to read.» (переопределяется через emptyLabel), чтобы завершённый web_fetch без ссылки не исчезал из таймлайна.

variant="timeline" для ChatWebSearch и ChatWebFetch вместе в одной ленте chat-message:

ChatWebFetchGroup

  • pages.length > 0 — заголовок «Read N pages» + инсет-список; упавшие строки (error: true) рендерятся grayscale-фавиконом и зачёркнутым line-through заголовком.
  • pages.length === 0 — строка «No pages read.» (переопределяется через emptyLabel).

ChatWebFetch (complete + truncated), ChatWebFetchGroup с упавшей строкой и ChatWebFetch в error с бейджем errorCode:

variant: 'card' | 'timeline'card это самостоятельная карточка; timeline (flush) убирает рамку/фон/тень и ведущую иконку, чтобы жить внутри жёлоба chat-message.

Фавиконы берутся из result.faviconUrl, либо из getFaviconUrl(domain) (по умолчанию — Google s2 endpoint, можно переопределить или отключить). Все подписи переопределяются через label-пропсы.

Oracul DS

Built for the future of AI-driven interfaces.