@green-on-grey/ui-kit 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"locales.js","names":["loading","cancel","create","close","remove","agentName","topbar","chat","agent","loading","cancel","create","close","remove","agentName","topbar","chat","agent","loading","cancel","create","close","remove","agentName","topbar","chat","agent","loading","cancel","create","close","remove","agentName","topbar","chat","agent","UIKIT_NS","resources","\"delete\"","\"sections\"","\"profile\"","\"title\"","\"conversations\"","\"conversation\"","\"topics\"","\"archive\"","\"noTopics\"","\"newTopic\"","\"topicTitle\"","\"topicHint\"","\"loadOlder\"","\"emptyTitle\"","\"placeholder\"","\"send\"","\"attach\"","\"typing\"","\"moreSteps\"","\"hideSteps\"","\"unread\"","\"retry\"","\"tooLarge\"","\"stop\"","\"voice\"","\"hold\"","\"recording\"","\"review\"","\"notRecognized\"","\"micDenied\"","\"unsupported\"","\"start\"","\"done\"","\"recognizing\"","\"recordingNow\"","\"failed\"","\"confirm\"","\"text\"","\"approve\"","\"reject\"","\"wait\"","\"starting\"","\"queued\"","\"palette\"","\"commands\"","\"skills\"","\"noSkills\"","\"empty\"","\"unknownCommand\"","\"sendAsText\"","\"skillPlaceholder\"","\"context\"","\"meter\"","\"full\"","\"compact\"","\"reset\"","\"waitTurn\"","\"event\"","\"details\"","\"files\"","\"open\"","\"download\"","\"save\"","\"notUtf8\"","\"rows\"","\"source\"","\"page\"","\"menu\"","\"options\"","\"model\"","\"modelDefault\"","\"noModels\"","\"modelCompactWarn\"","\"everywhere\"","\"capImage\"","\"capReasoning\""],"sources":["../src/locales/en.json","../src/locales/ru.json","../src/locales/de.json","../src/locales/es.json","../src/locales/zh.json","../src/locales/index.ts"],"sourcesContent":["{\n \"loading\": \"Loading…\",\n \"cancel\": \"Cancel\",\n \"create\": \"Create\",\n \"close\": \"Close\",\n \"delete\": \"Delete\",\n \"remove\": \"Remove\",\n \"agentName\": \"Agent name\",\n \"topbar\": {\n \"sections\": \"Sections\",\n \"profile\": \"Profile\"\n },\n \"chat\": {\n \"title\": \"Chat\",\n \"conversations\": \"Conversations\",\n \"conversation\": \"Conversation\",\n \"topics\": \"Topics\",\n \"archive\": \"Archive\",\n \"noTopics\": \"No topics yet\",\n \"newTopic\": \"New topic\",\n \"topicTitle\": \"Topic\",\n \"topicHint\": \"A topic has its own history and the same memory and space.\",\n \"loadOlder\": \"Earlier messages\",\n \"emptyTitle\": \"Hi, I am {name}\",\n \"placeholder\": \"Message {name}…\",\n \"send\": \"Send\",\n \"attach\": \"Attach files\",\n \"typing\": \"The agent is typing\",\n \"moreSteps\": \"{count, plural, one {# more step} other {# more steps}}\",\n \"hideSteps\": \"Hide steps\",\n \"unread\": \"{count, plural, one {# unread answer} other {# unread answers}}\",\n \"retry\": \"Retry\",\n \"tooLarge\": \"The file is too large.\",\n \"stop\": \"Stop\",\n \"voice\": {\n \"hold\": \"Hold to record\",\n \"stop\": \"Stop recording\",\n \"recording\": \"Recording… {seconds} s\",\n \"review\": \"Check the transcript before sending\",\n \"notRecognized\": \"The speech was not recognized\",\n \"micDenied\": \"No access to the microphone\",\n \"unsupported\": \"Voice input is not supported in this browser\",\n \"start\": \"Record a voice message\",\n \"done\": \"Stop\",\n \"recognizing\": \"Recognizing…\",\n \"recordingNow\": \"Recording\",\n \"failed\": \"The voice message could not be recognized\",\n \"retry\": \"Retry\"\n },\n \"confirm\": {\n \"title\": \"Confirm the action\",\n \"text\": \"The agent wants to perform: {action}\",\n \"approve\": \"Execute\",\n \"reject\": \"Reject\"\n },\n \"wait\": {\n \"starting\": \"The agent is starting…\",\n \"queued\": \"{count, plural, =0 {In the queue · you are next} one {In the queue · # ahead of you} other {In the queue · # ahead of you}}\"\n },\n \"palette\": {\n \"title\": \"Commands and skills\",\n \"commands\": \"Commands\",\n \"skills\": \"Skills\",\n \"noSkills\": \"No skills are granted to you\",\n \"empty\": \"Nothing found\"\n },\n \"unknownCommand\": \"Unknown command {name}\",\n \"sendAsText\": \"Send as text\",\n \"skillPlaceholder\": \"What to do with the skill?\",\n \"context\": {\n \"meter\": \"Context: {used} of {total} tokens ({pct}%)\",\n \"full\": \"Answers get more expensive and the agent may get confused.\",\n \"compact\": \"Compact\",\n \"reset\": \"Start over\",\n \"waitTurn\": \"Wait for the answer or stop it\"\n },\n \"event\": {\n \"details\": \"Summary\"\n },\n \"files\": {\n \"open\": \"Open {name}\",\n \"download\": \"Download\",\n \"failed\": \"Could not open the file\",\n \"tooLarge\": \"The file is too large to preview — download it\",\n \"save\": \"Download {name}\",\n \"notUtf8\": \"The file is not in UTF-8 — download it\",\n \"rows\": \"Showing {shown} of {total, plural, one {# row} other {# rows}}\",\n \"source\": \"Code\",\n \"page\": \"Page\"\n }\n },\n \"agent\": {\n \"menu\": \"Agent\",\n \"options\": \"Tone\",\n \"model\": \"Model\",\n \"modelDefault\": \"Default\",\n \"noModels\": \"No models granted — ask an administrator\",\n \"modelCompactWarn\": \"The context will be compacted before the next answer\",\n \"everywhere\": \"The change applies in every channel and connected service.\",\n \"capImage\": \"images\",\n \"capReasoning\": \"reasoning\"\n }\n}\n","{\n \"loading\": \"Загрузка…\",\n \"cancel\": \"Отмена\",\n \"create\": \"Создать\",\n \"close\": \"Закрыть\",\n \"delete\": \"Удалить\",\n \"remove\": \"Убрать\",\n \"agentName\": \"Имя агента\",\n \"topbar\": {\n \"sections\": \"Разделы\",\n \"profile\": \"Профиль\"\n },\n \"chat\": {\n \"title\": \"Чат\",\n \"conversations\": \"Разговоры\",\n \"conversation\": \"Разговор\",\n \"topics\": \"Темы\",\n \"archive\": \"Архив\",\n \"noTopics\": \"Тем пока нет\",\n \"newTopic\": \"Новая тема\",\n \"topicTitle\": \"Тема\",\n \"topicHint\": \"У темы своя история, а память и пространство — те же.\",\n \"loadOlder\": \"Более ранние сообщения\",\n \"emptyTitle\": \"Привет, я {name}\",\n \"placeholder\": \"Сообщение для {name}…\",\n \"send\": \"Отправить\",\n \"attach\": \"Прикрепить файлы\",\n \"typing\": \"Агент печатает\",\n \"moreSteps\": \"{count, plural, one {ещё # шаг} few {ещё # шага} many {ещё # шагов} other {ещё # шага}}\",\n \"hideSteps\": \"Скрыть шаги\",\n \"unread\": \"{count, plural, one {# непрочитанный ответ} few {# непрочитанных ответа} many {# непрочитанных ответов} other {# непрочитанных ответа}}\",\n \"retry\": \"Повторить\",\n \"tooLarge\": \"Файл слишком большой.\",\n \"stop\": \"Остановить\",\n \"voice\": {\n \"hold\": \"Удерживайте для записи\",\n \"stop\": \"Остановить запись\",\n \"recording\": \"Запись… {seconds} с\",\n \"review\": \"Проверьте расшифровку перед отправкой\",\n \"notRecognized\": \"Речь не распознана\",\n \"micDenied\": \"Нет доступа к микрофону\",\n \"unsupported\": \"Голосовой ввод не поддерживается этим браузером\",\n \"start\": \"Записать голосом\",\n \"done\": \"Стоп\",\n \"recognizing\": \"Распознаём…\",\n \"recordingNow\": \"Запись\",\n \"failed\": \"Не удалось распознать голосовое сообщение\",\n \"retry\": \"Повторить\"\n },\n \"confirm\": {\n \"title\": \"Подтвердите действие\",\n \"text\": \"Агент хочет выполнить: {action}\",\n \"approve\": \"Выполнить\",\n \"reject\": \"Отклонить\"\n },\n \"wait\": {\n \"starting\": \"Агент запускается…\",\n \"queued\": \"{count, plural, =0 {В очереди · вы следующий} other {В очереди · перед вами #}}\"\n },\n \"palette\": {\n \"title\": \"Команды и скиллы\",\n \"commands\": \"Команды\",\n \"skills\": \"Скиллы\",\n \"noSkills\": \"Вам не выдан ни один скилл\",\n \"empty\": \"Ничего не найдено\"\n },\n \"unknownCommand\": \"Неизвестная команда {name}\",\n \"sendAsText\": \"Отправить как текст\",\n \"skillPlaceholder\": \"Что сделать по скиллу?\",\n \"context\": {\n \"meter\": \"Контекст: {used} из {total} токенов ({pct} %)\",\n \"full\": \"Ответы дорожают, агент может путаться.\",\n \"compact\": \"Сжать\",\n \"reset\": \"Начать заново\",\n \"waitTurn\": \"Дождитесь ответа или остановите его\"\n },\n \"event\": {\n \"details\": \"Изложение\"\n },\n \"files\": {\n \"open\": \"Открыть {name}\",\n \"download\": \"Скачать\",\n \"failed\": \"Не удалось открыть файл\",\n \"tooLarge\": \"Файл слишком большой для просмотра — скачайте его\",\n \"save\": \"Скачать {name}\",\n \"notUtf8\": \"Файл не в кодировке UTF-8 — скачайте его\",\n \"rows\": \"Показаны {shown} из {total, plural, one {# строки} other {# строк}}\",\n \"source\": \"Код\",\n \"page\": \"Страница\"\n }\n },\n \"agent\": {\n \"menu\": \"Агент\",\n \"options\": \"Тон\",\n \"model\": \"Модель\",\n \"modelDefault\": \"По умолчанию\",\n \"noModels\": \"Модели не выданы — обратитесь к администратору\",\n \"modelCompactWarn\": \"Контекст будет сжат перед следующим ответом\",\n \"everywhere\": \"Изменение действует во всех каналах и подключённых сервисах.\",\n \"capImage\": \"изображения\",\n \"capReasoning\": \"рассуждение\"\n }\n}\n","{\n \"loading\": \"Wird geladen…\",\n \"cancel\": \"Abbrechen\",\n \"create\": \"Erstellen\",\n \"close\": \"Schließen\",\n \"delete\": \"Löschen\",\n \"remove\": \"Entfernen\",\n \"agentName\": \"Name des Agenten\",\n \"topbar\": {\n \"sections\": \"Bereiche\",\n \"profile\": \"Profil\"\n },\n \"chat\": {\n \"title\": \"Chat\",\n \"conversations\": \"Gespräche\",\n \"conversation\": \"Gespräch\",\n \"topics\": \"Themen\",\n \"archive\": \"Archiv\",\n \"noTopics\": \"Noch keine Themen\",\n \"newTopic\": \"Neues Thema\",\n \"topicTitle\": \"Thema\",\n \"topicHint\": \"Ein Thema hat einen eigenen Verlauf, aber dasselbe Gedächtnis und denselben Arbeitsbereich.\",\n \"loadOlder\": \"Frühere Nachrichten\",\n \"emptyTitle\": \"Hallo, ich bin {name}\",\n \"placeholder\": \"Nachricht an {name}…\",\n \"send\": \"Senden\",\n \"attach\": \"Dateien anhängen\",\n \"typing\": \"Der Agent schreibt\",\n \"moreSteps\": \"{count, plural, one {# weiterer Schritt} other {# weitere Schritte}}\",\n \"hideSteps\": \"Schritte ausblenden\",\n \"unread\": \"{count, plural, one {# ungelesene Antwort} other {# ungelesene Antworten}}\",\n \"retry\": \"Wiederholen\",\n \"tooLarge\": \"Die Datei ist zu groß.\",\n \"stop\": \"Stoppen\",\n \"voice\": {\n \"hold\": \"Zum Aufnehmen gedrückt halten\",\n \"stop\": \"Aufnahme beenden\",\n \"recording\": \"Aufnahme… {seconds} s\",\n \"review\": \"Prüfen Sie die Transkription vor dem Senden\",\n \"notRecognized\": \"Die Sprache wurde nicht erkannt\",\n \"micDenied\": \"Kein Zugriff auf das Mikrofon\",\n \"unsupported\": \"Spracheingabe wird von diesem Browser nicht unterstützt\",\n \"start\": \"Sprachnachricht aufnehmen\",\n \"done\": \"Stopp\",\n \"recognizing\": \"Wird erkannt…\",\n \"recordingNow\": \"Aufnahme\",\n \"failed\": \"Die Sprachnachricht konnte nicht erkannt werden\",\n \"retry\": \"Wiederholen\"\n },\n \"confirm\": {\n \"title\": \"Aktion bestätigen\",\n \"text\": \"Der Agent möchte ausführen: {action}\",\n \"approve\": \"Ausführen\",\n \"reject\": \"Ablehnen\"\n },\n \"wait\": {\n \"starting\": \"Der Agent startet…\",\n \"queued\": \"{count, plural, =0 {In der Warteschlange · Sie sind als Nächstes dran} other {In der Warteschlange · # vor Ihnen}}\"\n },\n \"palette\": {\n \"title\": \"Befehle und Skills\",\n \"commands\": \"Befehle\",\n \"skills\": \"Skills\",\n \"noSkills\": \"Ihnen ist kein Skill freigegeben\",\n \"empty\": \"Nichts gefunden\"\n },\n \"unknownCommand\": \"Unbekannter Befehl {name}\",\n \"sendAsText\": \"Als Text senden\",\n \"skillPlaceholder\": \"Was soll mit dem Skill getan werden?\",\n \"context\": {\n \"meter\": \"Kontext: {used} von {total} Tokens ({pct} %)\",\n \"full\": \"Antworten werden teurer, der Agent kann durcheinanderkommen.\",\n \"compact\": \"Komprimieren\",\n \"reset\": \"Neu beginnen\",\n \"waitTurn\": \"Warten Sie auf die Antwort oder stoppen Sie sie\"\n },\n \"event\": {\n \"details\": \"Zusammenfassung\"\n },\n \"files\": {\n \"open\": \"{name} öffnen\",\n \"download\": \"Herunterladen\",\n \"failed\": \"Die Datei konnte nicht geöffnet werden\",\n \"tooLarge\": \"Die Datei ist zu groß für die Vorschau — bitte herunterladen\",\n \"save\": \"{name} herunterladen\",\n \"notUtf8\": \"Die Datei ist nicht in UTF-8 — bitte herunterladen\",\n \"rows\": \"{shown} von {total, plural, one {# Zeile} other {# Zeilen}} angezeigt\",\n \"source\": \"Code\",\n \"page\": \"Seite\"\n }\n },\n \"agent\": {\n \"menu\": \"Agent\",\n \"options\": \"Ton\",\n \"model\": \"Modell\",\n \"modelDefault\": \"Standard\",\n \"noModels\": \"Keine Modelle freigegeben — wenden Sie sich an einen Administrator\",\n \"modelCompactWarn\": \"Der Kontext wird vor der nächsten Antwort komprimiert\",\n \"everywhere\": \"Die Änderung gilt in allen Kanälen und verbundenen Diensten.\",\n \"capImage\": \"Bilder\",\n \"capReasoning\": \"Reasoning\"\n }\n}\n","{\n \"loading\": \"Cargando…\",\n \"cancel\": \"Cancelar\",\n \"create\": \"Crear\",\n \"close\": \"Cerrar\",\n \"delete\": \"Eliminar\",\n \"remove\": \"Quitar\",\n \"agentName\": \"Nombre del agente\",\n \"topbar\": {\n \"sections\": \"Secciones\",\n \"profile\": \"Perfil\"\n },\n \"chat\": {\n \"title\": \"Chat\",\n \"conversations\": \"Conversaciones\",\n \"conversation\": \"Conversación\",\n \"topics\": \"Temas\",\n \"archive\": \"Archivo\",\n \"noTopics\": \"Aún no hay temas\",\n \"newTopic\": \"Nuevo tema\",\n \"topicTitle\": \"Tema\",\n \"topicHint\": \"Un tema tiene su propio historial y la misma memoria y espacio.\",\n \"loadOlder\": \"Mensajes anteriores\",\n \"emptyTitle\": \"Hola, soy {name}\",\n \"placeholder\": \"Mensaje para {name}…\",\n \"send\": \"Enviar\",\n \"attach\": \"Adjuntar archivos\",\n \"typing\": \"El agente está escribiendo\",\n \"moreSteps\": \"{count, plural, one {# paso más} other {# pasos más}}\",\n \"hideSteps\": \"Ocultar pasos\",\n \"unread\": \"{count, plural, one {# respuesta sin leer} other {# respuestas sin leer}}\",\n \"retry\": \"Reintentar\",\n \"tooLarge\": \"El archivo es demasiado grande.\",\n \"stop\": \"Detener\",\n \"voice\": {\n \"hold\": \"Mantenga pulsado para grabar\",\n \"stop\": \"Detener la grabación\",\n \"recording\": \"Grabando… {seconds} s\",\n \"review\": \"Revise la transcripción antes de enviar\",\n \"notRecognized\": \"No se reconoció la voz\",\n \"micDenied\": \"Sin acceso al micrófono\",\n \"unsupported\": \"Este navegador no admite la entrada de voz\",\n \"start\": \"Grabar un mensaje de voz\",\n \"done\": \"Detener\",\n \"recognizing\": \"Reconociendo…\",\n \"recordingNow\": \"Grabando\",\n \"failed\": \"No se pudo reconocer el mensaje de voz\",\n \"retry\": \"Reintentar\"\n },\n \"confirm\": {\n \"title\": \"Confirme la acción\",\n \"text\": \"El agente quiere ejecutar: {action}\",\n \"approve\": \"Ejecutar\",\n \"reject\": \"Rechazar\"\n },\n \"wait\": {\n \"starting\": \"El agente se está iniciando…\",\n \"queued\": \"{count, plural, =0 {En cola · usted es el siguiente} other {En cola · # por delante}}\"\n },\n \"palette\": {\n \"title\": \"Comandos y skills\",\n \"commands\": \"Comandos\",\n \"skills\": \"Skills\",\n \"noSkills\": \"No tiene skills disponibles\",\n \"empty\": \"No se encontró nada\"\n },\n \"unknownCommand\": \"Comando desconocido {name}\",\n \"sendAsText\": \"Enviar como texto\",\n \"skillPlaceholder\": \"¿Qué hacer con el skill?\",\n \"context\": {\n \"meter\": \"Contexto: {used} de {total} tokens ({pct} %)\",\n \"full\": \"Las respuestas se encarecen y el agente puede confundirse.\",\n \"compact\": \"Compactar\",\n \"reset\": \"Empezar de nuevo\",\n \"waitTurn\": \"Espere la respuesta o deténgala\"\n },\n \"event\": {\n \"details\": \"Resumen\"\n },\n \"files\": {\n \"open\": \"Abrir {name}\",\n \"download\": \"Descargar\",\n \"failed\": \"No se pudo abrir el archivo\",\n \"tooLarge\": \"El archivo es demasiado grande para la vista previa: descárguelo\",\n \"save\": \"Descargar {name}\",\n \"notUtf8\": \"El archivo no está en UTF-8: descárguelo\",\n \"rows\": \"Se muestran {shown} de {total, plural, one {# fila} other {# filas}}\",\n \"source\": \"Código\",\n \"page\": \"Página\"\n }\n },\n \"agent\": {\n \"menu\": \"Agente\",\n \"options\": \"Tono\",\n \"model\": \"Modelo\",\n \"modelDefault\": \"Predeterminado\",\n \"noModels\": \"No hay modelos disponibles: consulte a un administrador\",\n \"modelCompactWarn\": \"El contexto se compactará antes de la próxima respuesta\",\n \"everywhere\": \"El cambio se aplica en todos los canales y servicios conectados.\",\n \"capImage\": \"imágenes\",\n \"capReasoning\": \"razonamiento\"\n }\n}\n","{\n \"loading\": \"加载中…\",\n \"cancel\": \"取消\",\n \"create\": \"创建\",\n \"close\": \"关闭\",\n \"delete\": \"删除\",\n \"remove\": \"移除\",\n \"agentName\": \"智能体名称\",\n \"topbar\": {\n \"sections\": \"栏目\",\n \"profile\": \"个人资料\"\n },\n \"chat\": {\n \"title\": \"聊天\",\n \"conversations\": \"对话\",\n \"conversation\": \"对话\",\n \"topics\": \"话题\",\n \"archive\": \"归档\",\n \"noTopics\": \"暂无话题\",\n \"newTopic\": \"新话题\",\n \"topicTitle\": \"话题\",\n \"topicHint\": \"话题有独立的历史记录,记忆和空间与主对话相同。\",\n \"loadOlder\": \"更早的消息\",\n \"emptyTitle\": \"你好,我是 {name}\",\n \"placeholder\": \"给 {name} 发消息…\",\n \"send\": \"发送\",\n \"attach\": \"附加文件\",\n \"typing\": \"智能体正在输入\",\n \"moreSteps\": \"{count, plural, other {另外 # 个步骤}}\",\n \"hideSteps\": \"隐藏步骤\",\n \"unread\": \"{count} 条未读回复\",\n \"retry\": \"重试\",\n \"tooLarge\": \"文件太大。\",\n \"stop\": \"停止\",\n \"voice\": {\n \"hold\": \"按住录音\",\n \"stop\": \"停止录音\",\n \"recording\": \"录音中… {seconds} 秒\",\n \"review\": \"发送前请检查转写文本\",\n \"notRecognized\": \"未能识别语音\",\n \"micDenied\": \"无法访问麦克风\",\n \"unsupported\": \"此浏览器不支持语音输入\",\n \"start\": \"录制语音\",\n \"done\": \"停止\",\n \"recognizing\": \"正在识别…\",\n \"recordingNow\": \"录音中\",\n \"failed\": \"无法识别语音消息\",\n \"retry\": \"重试\"\n },\n \"confirm\": {\n \"title\": \"确认操作\",\n \"text\": \"代理想要执行:{action}\",\n \"approve\": \"执行\",\n \"reject\": \"拒绝\"\n },\n \"wait\": {\n \"starting\": \"代理正在启动…\",\n \"queued\": \"{count, plural, =0 {排队中 · 您是下一位} other {排队中 · 前面还有 # 位}}\"\n },\n \"palette\": {\n \"title\": \"命令和技能\",\n \"commands\": \"命令\",\n \"skills\": \"技能\",\n \"noSkills\": \"您没有可用的技能\",\n \"empty\": \"未找到\"\n },\n \"unknownCommand\": \"未知命令 {name}\",\n \"sendAsText\": \"作为文本发送\",\n \"skillPlaceholder\": \"用这个技能做什么?\",\n \"context\": {\n \"meter\": \"上下文:{used} / {total} 个令牌({pct}%)\",\n \"full\": \"回答变得更贵,代理可能会混淆。\",\n \"compact\": \"压缩\",\n \"reset\": \"重新开始\",\n \"waitTurn\": \"请等待回答或停止它\"\n },\n \"event\": {\n \"details\": \"摘要\"\n },\n \"files\": {\n \"open\": \"打开 {name}\",\n \"download\": \"下载\",\n \"failed\": \"无法打开文件\",\n \"tooLarge\": \"文件太大,无法预览,请下载\",\n \"save\": \"下载 {name}\",\n \"notUtf8\": \"文件不是 UTF-8 编码,请下载\",\n \"rows\": \"显示 {total} 行中的 {shown} 行\",\n \"source\": \"代码\",\n \"page\": \"页面\"\n }\n },\n \"agent\": {\n \"menu\": \"智能体\",\n \"options\": \"语气\",\n \"model\": \"模型\",\n \"modelDefault\": \"默认\",\n \"noModels\": \"没有可用的模型——请联系管理员\",\n \"modelCompactWarn\": \"下次回答前将压缩上下文\",\n \"everywhere\": \"更改在所有渠道和已连接的服务中生效。\",\n \"capImage\": \"图片\",\n \"capReasoning\": \"推理\"\n }\n}\n","import en from \"./en.json\";\nimport ru from \"./ru.json\";\nimport de from \"./de.json\";\nimport es from \"./es.json\";\nimport zh from \"./zh.json\";\n\n/** Strings of the components in the five languages of the products. A product adds\n * them to its i18next instance under the namespace `uikit`. */\nexport const resources = { en, ru, de, es, zh };\nexport type KitLanguage = keyof typeof resources;\nexport { UIKIT_NS } from \"../i18n\";\n"],"mappings":";;;AKQA,IAAaqC,IAAY;CAAE,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;AAAG"}
1
+ {"version":3,"file":"locales.js","names":["loading","cancel","create","close","remove","agentName","topbar","chat","agent","loading","cancel","create","close","remove","agentName","topbar","chat","agent","loading","cancel","create","close","remove","agentName","topbar","chat","agent","loading","cancel","create","close","remove","agentName","topbar","chat","agent","UIKIT_NS","resources","\"delete\"","\"sections\"","\"profile\"","\"title\"","\"conversations\"","\"conversation\"","\"topics\"","\"archive\"","\"noTopics\"","\"newTopic\"","\"topicTitle\"","\"topicHint\"","\"loadOlder\"","\"emptyTitle\"","\"placeholder\"","\"send\"","\"attach\"","\"typing\"","\"moreSteps\"","\"hideSteps\"","\"unread\"","\"retry\"","\"tooLarge\"","\"stop\"","\"voice\"","\"hold\"","\"recording\"","\"review\"","\"notRecognized\"","\"micDenied\"","\"unsupported\"","\"start\"","\"done\"","\"recognizing\"","\"recordingNow\"","\"failed\"","\"confirm\"","\"text\"","\"approve\"","\"reject\"","\"wait\"","\"starting\"","\"queued\"","\"palette\"","\"commands\"","\"skills\"","\"noSkills\"","\"empty\"","\"unknownCommand\"","\"sendAsText\"","\"skillPlaceholder\"","\"context\"","\"meter\"","\"full\"","\"compact\"","\"reset\"","\"waitTurn\"","\"event\"","\"details\"","\"files\"","\"open\"","\"download\"","\"save\"","\"notUtf8\"","\"rows\"","\"source\"","\"page\"","\"converted\"","\"pagesShown\"","\"firstPages\"","\"cols\"","\"preparing\"","\"preparingHint\"","\"unavailable\"","\"formulaHint\"","\"sheets\"","\"reasons\"","\"too_large\"","\"timeout\"","\"broken\"","\"busy\"","\"notice\"","\"more\"","\"less\"","\"menu\"","\"options\"","\"model\"","\"modelDefault\"","\"noModels\"","\"modelCompactWarn\"","\"everywhere\"","\"capImage\"","\"capReasoning\""],"sources":["../src/locales/en.json","../src/locales/ru.json","../src/locales/de.json","../src/locales/es.json","../src/locales/zh.json","../src/locales/index.ts"],"sourcesContent":["{\n \"loading\": \"Loading…\",\n \"cancel\": \"Cancel\",\n \"create\": \"Create\",\n \"close\": \"Close\",\n \"delete\": \"Delete\",\n \"remove\": \"Remove\",\n \"agentName\": \"Agent name\",\n \"topbar\": {\n \"sections\": \"Sections\",\n \"profile\": \"Profile\"\n },\n \"chat\": {\n \"title\": \"Chat\",\n \"conversations\": \"Conversations\",\n \"conversation\": \"Conversation\",\n \"topics\": \"Topics\",\n \"archive\": \"Archive\",\n \"noTopics\": \"No topics yet\",\n \"newTopic\": \"New topic\",\n \"topicTitle\": \"Topic\",\n \"topicHint\": \"A topic has its own history and the same memory and space.\",\n \"loadOlder\": \"Earlier messages\",\n \"emptyTitle\": \"Hi, I am {name}\",\n \"placeholder\": \"Message {name}…\",\n \"send\": \"Send\",\n \"attach\": \"Attach files\",\n \"typing\": \"The agent is typing\",\n \"moreSteps\": \"{count, plural, one {# more step} other {# more steps}}\",\n \"hideSteps\": \"Hide steps\",\n \"unread\": \"{count, plural, one {# unread answer} other {# unread answers}}\",\n \"retry\": \"Retry\",\n \"tooLarge\": \"The file is too large.\",\n \"stop\": \"Stop\",\n \"voice\": {\n \"hold\": \"Hold to record\",\n \"stop\": \"Stop recording\",\n \"recording\": \"Recording… {seconds} s\",\n \"review\": \"Check the transcript before sending\",\n \"notRecognized\": \"The speech was not recognized\",\n \"micDenied\": \"No access to the microphone\",\n \"unsupported\": \"Voice input is not supported in this browser\",\n \"start\": \"Record a voice message\",\n \"done\": \"Stop\",\n \"recognizing\": \"Recognizing…\",\n \"recordingNow\": \"Recording\",\n \"failed\": \"The voice message could not be recognized\",\n \"retry\": \"Retry\"\n },\n \"confirm\": {\n \"title\": \"Confirm the action\",\n \"text\": \"The agent wants to perform: {action}\",\n \"approve\": \"Execute\",\n \"reject\": \"Reject\"\n },\n \"wait\": {\n \"starting\": \"The agent is starting…\",\n \"queued\": \"{count, plural, =0 {In the queue · you are next} one {In the queue · # ahead of you} other {In the queue · # ahead of you}}\"\n },\n \"palette\": {\n \"title\": \"Commands and skills\",\n \"commands\": \"Commands\",\n \"skills\": \"Skills\",\n \"noSkills\": \"No skills are granted to you\",\n \"empty\": \"Nothing found\"\n },\n \"unknownCommand\": \"Unknown command {name}\",\n \"sendAsText\": \"Send as text\",\n \"skillPlaceholder\": \"What to do with the skill?\",\n \"context\": {\n \"meter\": \"Context: {used} of {total} tokens ({pct}%)\",\n \"full\": \"Answers get more expensive and the agent may get confused.\",\n \"compact\": \"Compact\",\n \"reset\": \"Start over\",\n \"waitTurn\": \"Wait for the answer or stop it\"\n },\n \"event\": {\n \"details\": \"Summary\"\n },\n \"files\": {\n \"open\": \"Open {name}\",\n \"download\": \"Download\",\n \"failed\": \"Could not open the file\",\n \"tooLarge\": \"The file is too large to preview — download it\",\n \"save\": \"Download {name}\",\n \"notUtf8\": \"The file is not in UTF-8 — download it\",\n \"rows\": \"Showing {shown} of {total, plural, one {# row} other {# rows}}\",\n \"source\": \"Code\",\n \"page\": \"Page\",\n \"converted\": \"Preview · converted from {format}\",\n \"pagesShown\": \"Showing {shown} of {total} pages\",\n \"firstPages\": \"Showing the first {shown} pages\",\n \"cols\": \"and {shown} of {total} columns\",\n \"preparing\": \"Preparing the preview…\",\n \"preparingHint\": \"Usually a few seconds\",\n \"unavailable\": \"Preview unavailable\",\n \"formulaHint\": \"The value is calculated when opened in Excel\",\n \"sheets\": \"Sheets\",\n \"reasons\": {\n \"too_large\": \"The file is over {limit} MB\",\n \"timeout\": \"Took longer than 30 seconds\",\n \"broken\": \"The file is damaged or the format is not supported\",\n \"busy\": \"The service is busy, try again later\"\n }\n },\n \"notice\": {\n \"more\": \"Show in full\",\n \"less\": \"Collapse\"\n }\n },\n \"agent\": {\n \"menu\": \"Agent\",\n \"options\": \"Tone\",\n \"model\": \"Model\",\n \"modelDefault\": \"Default\",\n \"noModels\": \"No models granted — ask an administrator\",\n \"modelCompactWarn\": \"The context will be compacted before the next answer\",\n \"everywhere\": \"The change applies in every channel and connected service.\",\n \"capImage\": \"images\",\n \"capReasoning\": \"reasoning\"\n }\n}\n","{\n \"loading\": \"Загрузка…\",\n \"cancel\": \"Отмена\",\n \"create\": \"Создать\",\n \"close\": \"Закрыть\",\n \"delete\": \"Удалить\",\n \"remove\": \"Убрать\",\n \"agentName\": \"Имя агента\",\n \"topbar\": {\n \"sections\": \"Разделы\",\n \"profile\": \"Профиль\"\n },\n \"chat\": {\n \"title\": \"Чат\",\n \"conversations\": \"Разговоры\",\n \"conversation\": \"Разговор\",\n \"topics\": \"Темы\",\n \"archive\": \"Архив\",\n \"noTopics\": \"Тем пока нет\",\n \"newTopic\": \"Новая тема\",\n \"topicTitle\": \"Тема\",\n \"topicHint\": \"У темы своя история, а память и пространство — те же.\",\n \"loadOlder\": \"Более ранние сообщения\",\n \"emptyTitle\": \"Привет, я {name}\",\n \"placeholder\": \"Сообщение для {name}…\",\n \"send\": \"Отправить\",\n \"attach\": \"Прикрепить файлы\",\n \"typing\": \"Агент печатает\",\n \"moreSteps\": \"{count, plural, one {ещё # шаг} few {ещё # шага} many {ещё # шагов} other {ещё # шага}}\",\n \"hideSteps\": \"Скрыть шаги\",\n \"unread\": \"{count, plural, one {# непрочитанный ответ} few {# непрочитанных ответа} many {# непрочитанных ответов} other {# непрочитанных ответа}}\",\n \"retry\": \"Повторить\",\n \"tooLarge\": \"Файл слишком большой.\",\n \"stop\": \"Остановить\",\n \"voice\": {\n \"hold\": \"Удерживайте для записи\",\n \"stop\": \"Остановить запись\",\n \"recording\": \"Запись… {seconds} с\",\n \"review\": \"Проверьте расшифровку перед отправкой\",\n \"notRecognized\": \"Речь не распознана\",\n \"micDenied\": \"Нет доступа к микрофону\",\n \"unsupported\": \"Голосовой ввод не поддерживается этим браузером\",\n \"start\": \"Записать голосом\",\n \"done\": \"Стоп\",\n \"recognizing\": \"Распознаём…\",\n \"recordingNow\": \"Запись\",\n \"failed\": \"Не удалось распознать голосовое сообщение\",\n \"retry\": \"Повторить\"\n },\n \"confirm\": {\n \"title\": \"Подтвердите действие\",\n \"text\": \"Агент хочет выполнить: {action}\",\n \"approve\": \"Выполнить\",\n \"reject\": \"Отклонить\"\n },\n \"wait\": {\n \"starting\": \"Агент запускается…\",\n \"queued\": \"{count, plural, =0 {В очереди · вы следующий} other {В очереди · перед вами #}}\"\n },\n \"palette\": {\n \"title\": \"Команды и скиллы\",\n \"commands\": \"Команды\",\n \"skills\": \"Скиллы\",\n \"noSkills\": \"Вам не выдан ни один скилл\",\n \"empty\": \"Ничего не найдено\"\n },\n \"unknownCommand\": \"Неизвестная команда {name}\",\n \"sendAsText\": \"Отправить как текст\",\n \"skillPlaceholder\": \"Что сделать по скиллу?\",\n \"context\": {\n \"meter\": \"Контекст: {used} из {total} токенов ({pct} %)\",\n \"full\": \"Ответы дорожают, агент может путаться.\",\n \"compact\": \"Сжать\",\n \"reset\": \"Начать заново\",\n \"waitTurn\": \"Дождитесь ответа или остановите его\"\n },\n \"event\": {\n \"details\": \"Изложение\"\n },\n \"files\": {\n \"open\": \"Открыть {name}\",\n \"download\": \"Скачать\",\n \"failed\": \"Не удалось открыть файл\",\n \"tooLarge\": \"Файл слишком большой для просмотра — скачайте его\",\n \"save\": \"Скачать {name}\",\n \"notUtf8\": \"Файл не в кодировке UTF-8 — скачайте его\",\n \"rows\": \"Показаны {shown} из {total, plural, one {# строки} other {# строк}}\",\n \"source\": \"Код\",\n \"page\": \"Страница\",\n \"converted\": \"Предпросмотр · сконвертировано из {format}\",\n \"pagesShown\": \"Показаны {shown} из {total} страниц\",\n \"firstPages\": \"Показаны первые {shown} страниц\",\n \"cols\": \"и {shown} из {total} столбцов\",\n \"preparing\": \"Готовим предпросмотр…\",\n \"preparingHint\": \"Обычно несколько секунд\",\n \"unavailable\": \"Предпросмотр недоступен\",\n \"formulaHint\": \"Значение посчитается при открытии в Excel\",\n \"sheets\": \"Листы\",\n \"reasons\": {\n \"too_large\": \"Файл больше {limit} МБ\",\n \"timeout\": \"Не успели за 30 секунд\",\n \"broken\": \"Файл повреждён или формат не поддерживается\",\n \"busy\": \"Сервис занят, попробуйте позже\"\n }\n },\n \"notice\": {\n \"more\": \"Показать полностью\",\n \"less\": \"Свернуть\"\n }\n },\n \"agent\": {\n \"menu\": \"Агент\",\n \"options\": \"Тон\",\n \"model\": \"Модель\",\n \"modelDefault\": \"По умолчанию\",\n \"noModels\": \"Модели не выданы — обратитесь к администратору\",\n \"modelCompactWarn\": \"Контекст будет сжат перед следующим ответом\",\n \"everywhere\": \"Изменение действует во всех каналах и подключённых сервисах.\",\n \"capImage\": \"изображения\",\n \"capReasoning\": \"рассуждение\"\n }\n}\n","{\n \"loading\": \"Wird geladen…\",\n \"cancel\": \"Abbrechen\",\n \"create\": \"Erstellen\",\n \"close\": \"Schließen\",\n \"delete\": \"Löschen\",\n \"remove\": \"Entfernen\",\n \"agentName\": \"Name des Agenten\",\n \"topbar\": {\n \"sections\": \"Bereiche\",\n \"profile\": \"Profil\"\n },\n \"chat\": {\n \"title\": \"Chat\",\n \"conversations\": \"Gespräche\",\n \"conversation\": \"Gespräch\",\n \"topics\": \"Themen\",\n \"archive\": \"Archiv\",\n \"noTopics\": \"Noch keine Themen\",\n \"newTopic\": \"Neues Thema\",\n \"topicTitle\": \"Thema\",\n \"topicHint\": \"Ein Thema hat einen eigenen Verlauf, aber dasselbe Gedächtnis und denselben Arbeitsbereich.\",\n \"loadOlder\": \"Frühere Nachrichten\",\n \"emptyTitle\": \"Hallo, ich bin {name}\",\n \"placeholder\": \"Nachricht an {name}…\",\n \"send\": \"Senden\",\n \"attach\": \"Dateien anhängen\",\n \"typing\": \"Der Agent schreibt\",\n \"moreSteps\": \"{count, plural, one {# weiterer Schritt} other {# weitere Schritte}}\",\n \"hideSteps\": \"Schritte ausblenden\",\n \"unread\": \"{count, plural, one {# ungelesene Antwort} other {# ungelesene Antworten}}\",\n \"retry\": \"Wiederholen\",\n \"tooLarge\": \"Die Datei ist zu groß.\",\n \"stop\": \"Stoppen\",\n \"voice\": {\n \"hold\": \"Zum Aufnehmen gedrückt halten\",\n \"stop\": \"Aufnahme beenden\",\n \"recording\": \"Aufnahme… {seconds} s\",\n \"review\": \"Prüfen Sie die Transkription vor dem Senden\",\n \"notRecognized\": \"Die Sprache wurde nicht erkannt\",\n \"micDenied\": \"Kein Zugriff auf das Mikrofon\",\n \"unsupported\": \"Spracheingabe wird von diesem Browser nicht unterstützt\",\n \"start\": \"Sprachnachricht aufnehmen\",\n \"done\": \"Stopp\",\n \"recognizing\": \"Wird erkannt…\",\n \"recordingNow\": \"Aufnahme\",\n \"failed\": \"Die Sprachnachricht konnte nicht erkannt werden\",\n \"retry\": \"Wiederholen\"\n },\n \"confirm\": {\n \"title\": \"Aktion bestätigen\",\n \"text\": \"Der Agent möchte ausführen: {action}\",\n \"approve\": \"Ausführen\",\n \"reject\": \"Ablehnen\"\n },\n \"wait\": {\n \"starting\": \"Der Agent startet…\",\n \"queued\": \"{count, plural, =0 {In der Warteschlange · Sie sind als Nächstes dran} other {In der Warteschlange · # vor Ihnen}}\"\n },\n \"palette\": {\n \"title\": \"Befehle und Skills\",\n \"commands\": \"Befehle\",\n \"skills\": \"Skills\",\n \"noSkills\": \"Ihnen ist kein Skill freigegeben\",\n \"empty\": \"Nichts gefunden\"\n },\n \"unknownCommand\": \"Unbekannter Befehl {name}\",\n \"sendAsText\": \"Als Text senden\",\n \"skillPlaceholder\": \"Was soll mit dem Skill getan werden?\",\n \"context\": {\n \"meter\": \"Kontext: {used} von {total} Tokens ({pct} %)\",\n \"full\": \"Antworten werden teurer, der Agent kann durcheinanderkommen.\",\n \"compact\": \"Komprimieren\",\n \"reset\": \"Neu beginnen\",\n \"waitTurn\": \"Warten Sie auf die Antwort oder stoppen Sie sie\"\n },\n \"event\": {\n \"details\": \"Zusammenfassung\"\n },\n \"files\": {\n \"open\": \"{name} öffnen\",\n \"download\": \"Herunterladen\",\n \"failed\": \"Die Datei konnte nicht geöffnet werden\",\n \"tooLarge\": \"Die Datei ist zu groß für die Vorschau — bitte herunterladen\",\n \"save\": \"{name} herunterladen\",\n \"notUtf8\": \"Die Datei ist nicht in UTF-8 — bitte herunterladen\",\n \"rows\": \"{shown} von {total, plural, one {# Zeile} other {# Zeilen}} angezeigt\",\n \"source\": \"Code\",\n \"page\": \"Seite\",\n \"converted\": \"Vorschau · konvertiert aus {format}\",\n \"pagesShown\": \"{shown} von {total} Seiten werden angezeigt\",\n \"firstPages\": \"Die ersten {shown} Seiten werden angezeigt\",\n \"cols\": \"und {shown} von {total} Spalten\",\n \"preparing\": \"Vorschau wird vorbereitet…\",\n \"preparingHint\": \"Meist nur wenige Sekunden\",\n \"unavailable\": \"Vorschau nicht verfügbar\",\n \"formulaHint\": \"Der Wert wird beim Öffnen in Excel berechnet\",\n \"sheets\": \"Blätter\",\n \"reasons\": {\n \"too_large\": \"Die Datei ist größer als {limit} MB\",\n \"timeout\": \"Hat länger als 30 Sekunden gedauert\",\n \"broken\": \"Die Datei ist beschädigt oder das Format wird nicht unterstützt\",\n \"busy\": \"Der Dienst ist ausgelastet, versuchen Sie es später erneut\"\n }\n },\n \"notice\": {\n \"more\": \"Vollständig anzeigen\",\n \"less\": \"Einklappen\"\n }\n },\n \"agent\": {\n \"menu\": \"Agent\",\n \"options\": \"Ton\",\n \"model\": \"Modell\",\n \"modelDefault\": \"Standard\",\n \"noModels\": \"Keine Modelle freigegeben — wenden Sie sich an einen Administrator\",\n \"modelCompactWarn\": \"Der Kontext wird vor der nächsten Antwort komprimiert\",\n \"everywhere\": \"Die Änderung gilt in allen Kanälen und verbundenen Diensten.\",\n \"capImage\": \"Bilder\",\n \"capReasoning\": \"Reasoning\"\n }\n}\n","{\n \"loading\": \"Cargando…\",\n \"cancel\": \"Cancelar\",\n \"create\": \"Crear\",\n \"close\": \"Cerrar\",\n \"delete\": \"Eliminar\",\n \"remove\": \"Quitar\",\n \"agentName\": \"Nombre del agente\",\n \"topbar\": {\n \"sections\": \"Secciones\",\n \"profile\": \"Perfil\"\n },\n \"chat\": {\n \"title\": \"Chat\",\n \"conversations\": \"Conversaciones\",\n \"conversation\": \"Conversación\",\n \"topics\": \"Temas\",\n \"archive\": \"Archivo\",\n \"noTopics\": \"Aún no hay temas\",\n \"newTopic\": \"Nuevo tema\",\n \"topicTitle\": \"Tema\",\n \"topicHint\": \"Un tema tiene su propio historial y la misma memoria y espacio.\",\n \"loadOlder\": \"Mensajes anteriores\",\n \"emptyTitle\": \"Hola, soy {name}\",\n \"placeholder\": \"Mensaje para {name}…\",\n \"send\": \"Enviar\",\n \"attach\": \"Adjuntar archivos\",\n \"typing\": \"El agente está escribiendo\",\n \"moreSteps\": \"{count, plural, one {# paso más} other {# pasos más}}\",\n \"hideSteps\": \"Ocultar pasos\",\n \"unread\": \"{count, plural, one {# respuesta sin leer} other {# respuestas sin leer}}\",\n \"retry\": \"Reintentar\",\n \"tooLarge\": \"El archivo es demasiado grande.\",\n \"stop\": \"Detener\",\n \"voice\": {\n \"hold\": \"Mantenga pulsado para grabar\",\n \"stop\": \"Detener la grabación\",\n \"recording\": \"Grabando… {seconds} s\",\n \"review\": \"Revise la transcripción antes de enviar\",\n \"notRecognized\": \"No se reconoció la voz\",\n \"micDenied\": \"Sin acceso al micrófono\",\n \"unsupported\": \"Este navegador no admite la entrada de voz\",\n \"start\": \"Grabar un mensaje de voz\",\n \"done\": \"Detener\",\n \"recognizing\": \"Reconociendo…\",\n \"recordingNow\": \"Grabando\",\n \"failed\": \"No se pudo reconocer el mensaje de voz\",\n \"retry\": \"Reintentar\"\n },\n \"confirm\": {\n \"title\": \"Confirme la acción\",\n \"text\": \"El agente quiere ejecutar: {action}\",\n \"approve\": \"Ejecutar\",\n \"reject\": \"Rechazar\"\n },\n \"wait\": {\n \"starting\": \"El agente se está iniciando…\",\n \"queued\": \"{count, plural, =0 {En cola · usted es el siguiente} other {En cola · # por delante}}\"\n },\n \"palette\": {\n \"title\": \"Comandos y skills\",\n \"commands\": \"Comandos\",\n \"skills\": \"Skills\",\n \"noSkills\": \"No tiene skills disponibles\",\n \"empty\": \"No se encontró nada\"\n },\n \"unknownCommand\": \"Comando desconocido {name}\",\n \"sendAsText\": \"Enviar como texto\",\n \"skillPlaceholder\": \"¿Qué hacer con el skill?\",\n \"context\": {\n \"meter\": \"Contexto: {used} de {total} tokens ({pct} %)\",\n \"full\": \"Las respuestas se encarecen y el agente puede confundirse.\",\n \"compact\": \"Compactar\",\n \"reset\": \"Empezar de nuevo\",\n \"waitTurn\": \"Espere la respuesta o deténgala\"\n },\n \"event\": {\n \"details\": \"Resumen\"\n },\n \"files\": {\n \"open\": \"Abrir {name}\",\n \"download\": \"Descargar\",\n \"failed\": \"No se pudo abrir el archivo\",\n \"tooLarge\": \"El archivo es demasiado grande para la vista previa: descárguelo\",\n \"save\": \"Descargar {name}\",\n \"notUtf8\": \"El archivo no está en UTF-8: descárguelo\",\n \"rows\": \"Se muestran {shown} de {total, plural, one {# fila} other {# filas}}\",\n \"source\": \"Código\",\n \"page\": \"Página\",\n \"converted\": \"Vista previa · convertido desde {format}\",\n \"pagesShown\": \"Se muestran {shown} de {total} páginas\",\n \"firstPages\": \"Se muestran las primeras {shown} páginas\",\n \"cols\": \"y {shown} de {total} columnas\",\n \"preparing\": \"Preparando la vista previa…\",\n \"preparingHint\": \"Suele tardar unos segundos\",\n \"unavailable\": \"Vista previa no disponible\",\n \"formulaHint\": \"El valor se calcula al abrir el archivo en Excel\",\n \"sheets\": \"Hojas\",\n \"reasons\": {\n \"too_large\": \"El archivo supera {limit} MB\",\n \"timeout\": \"Tardó más de 30 segundos\",\n \"broken\": \"El archivo está dañado o el formato no es compatible\",\n \"busy\": \"El servicio está ocupado, inténtalo más tarde\"\n }\n },\n \"notice\": {\n \"more\": \"Mostrar completo\",\n \"less\": \"Contraer\"\n }\n },\n \"agent\": {\n \"menu\": \"Agente\",\n \"options\": \"Tono\",\n \"model\": \"Modelo\",\n \"modelDefault\": \"Predeterminado\",\n \"noModels\": \"No hay modelos disponibles: consulte a un administrador\",\n \"modelCompactWarn\": \"El contexto se compactará antes de la próxima respuesta\",\n \"everywhere\": \"El cambio se aplica en todos los canales y servicios conectados.\",\n \"capImage\": \"imágenes\",\n \"capReasoning\": \"razonamiento\"\n }\n}\n","{\n \"loading\": \"加载中…\",\n \"cancel\": \"取消\",\n \"create\": \"创建\",\n \"close\": \"关闭\",\n \"delete\": \"删除\",\n \"remove\": \"移除\",\n \"agentName\": \"智能体名称\",\n \"topbar\": {\n \"sections\": \"栏目\",\n \"profile\": \"个人资料\"\n },\n \"chat\": {\n \"title\": \"聊天\",\n \"conversations\": \"对话\",\n \"conversation\": \"对话\",\n \"topics\": \"话题\",\n \"archive\": \"归档\",\n \"noTopics\": \"暂无话题\",\n \"newTopic\": \"新话题\",\n \"topicTitle\": \"话题\",\n \"topicHint\": \"话题有独立的历史记录,记忆和空间与主对话相同。\",\n \"loadOlder\": \"更早的消息\",\n \"emptyTitle\": \"你好,我是 {name}\",\n \"placeholder\": \"给 {name} 发消息…\",\n \"send\": \"发送\",\n \"attach\": \"附加文件\",\n \"typing\": \"智能体正在输入\",\n \"moreSteps\": \"{count, plural, other {另外 # 个步骤}}\",\n \"hideSteps\": \"隐藏步骤\",\n \"unread\": \"{count} 条未读回复\",\n \"retry\": \"重试\",\n \"tooLarge\": \"文件太大。\",\n \"stop\": \"停止\",\n \"voice\": {\n \"hold\": \"按住录音\",\n \"stop\": \"停止录音\",\n \"recording\": \"录音中… {seconds} 秒\",\n \"review\": \"发送前请检查转写文本\",\n \"notRecognized\": \"未能识别语音\",\n \"micDenied\": \"无法访问麦克风\",\n \"unsupported\": \"此浏览器不支持语音输入\",\n \"start\": \"录制语音\",\n \"done\": \"停止\",\n \"recognizing\": \"正在识别…\",\n \"recordingNow\": \"录音中\",\n \"failed\": \"无法识别语音消息\",\n \"retry\": \"重试\"\n },\n \"confirm\": {\n \"title\": \"确认操作\",\n \"text\": \"代理想要执行:{action}\",\n \"approve\": \"执行\",\n \"reject\": \"拒绝\"\n },\n \"wait\": {\n \"starting\": \"代理正在启动…\",\n \"queued\": \"{count, plural, =0 {排队中 · 您是下一位} other {排队中 · 前面还有 # 位}}\"\n },\n \"palette\": {\n \"title\": \"命令和技能\",\n \"commands\": \"命令\",\n \"skills\": \"技能\",\n \"noSkills\": \"您没有可用的技能\",\n \"empty\": \"未找到\"\n },\n \"unknownCommand\": \"未知命令 {name}\",\n \"sendAsText\": \"作为文本发送\",\n \"skillPlaceholder\": \"用这个技能做什么?\",\n \"context\": {\n \"meter\": \"上下文:{used} / {total} 个令牌({pct}%)\",\n \"full\": \"回答变得更贵,代理可能会混淆。\",\n \"compact\": \"压缩\",\n \"reset\": \"重新开始\",\n \"waitTurn\": \"请等待回答或停止它\"\n },\n \"event\": {\n \"details\": \"摘要\"\n },\n \"files\": {\n \"open\": \"打开 {name}\",\n \"download\": \"下载\",\n \"failed\": \"无法打开文件\",\n \"tooLarge\": \"文件太大,无法预览,请下载\",\n \"save\": \"下载 {name}\",\n \"notUtf8\": \"文件不是 UTF-8 编码,请下载\",\n \"rows\": \"显示 {total} 行中的 {shown} 行\",\n \"source\": \"代码\",\n \"page\": \"页面\",\n \"converted\": \"预览 · 由 {format} 转换\",\n \"pagesShown\": \"显示 {shown} / {total} 页\",\n \"firstPages\": \"显示前 {shown} 页\",\n \"cols\": \"以及 {shown} / {total} 列\",\n \"preparing\": \"正在准备预览…\",\n \"preparingHint\": \"通常只需几秒\",\n \"unavailable\": \"无法预览\",\n \"formulaHint\": \"在 Excel 中打开时计算该值\",\n \"sheets\": \"工作表\",\n \"reasons\": {\n \"too_large\": \"文件大于 {limit} MB\",\n \"timeout\": \"超过 30 秒未完成\",\n \"broken\": \"文件已损坏或格式不受支持\",\n \"busy\": \"服务繁忙,请稍后重试\"\n }\n },\n \"notice\": {\n \"more\": \"显示全部\",\n \"less\": \"收起\"\n }\n },\n \"agent\": {\n \"menu\": \"智能体\",\n \"options\": \"语气\",\n \"model\": \"模型\",\n \"modelDefault\": \"默认\",\n \"noModels\": \"没有可用的模型——请联系管理员\",\n \"modelCompactWarn\": \"下次回答前将压缩上下文\",\n \"everywhere\": \"更改在所有渠道和已连接的服务中生效。\",\n \"capImage\": \"图片\",\n \"capReasoning\": \"推理\"\n }\n}\n","import en from \"./en.json\";\nimport ru from \"./ru.json\";\nimport de from \"./de.json\";\nimport es from \"./es.json\";\nimport zh from \"./zh.json\";\n\n/** Strings of the components in the five languages of the products. A product adds\n * them to its i18next instance under the namespace `uikit`. */\nexport const resources = { en, ru, de, es, zh };\nexport type KitLanguage = keyof typeof resources;\nexport { UIKIT_NS } from \"../i18n\";\n"],"mappings":";;;AKQA,IAAaqC,IAAY;CAAE,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CAAI,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;AAAG"}
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.8.0",
2
+ "version": "1.10.0",
3
3
  "classes": [
4
4
  "a",
5
5
  "action",
@@ -17,6 +17,8 @@
17
17
  "app",
18
18
  "arch",
19
19
  "att-cap",
20
+ "att-converted",
21
+ "att-formula",
20
22
  "att-html",
21
23
  "att-htmlbox",
22
24
  "att-ic",
@@ -26,7 +28,10 @@
26
28
  "att-more",
27
29
  "att-msg",
28
30
  "att-name",
31
+ "att-num",
32
+ "att-office",
29
33
  "att-pdf",
34
+ "att-sheet",
30
35
  "att-size",
31
36
  "att-table",
32
37
  "att-text",
@@ -34,6 +39,7 @@
34
39
  "att-tile",
35
40
  "att-title",
36
41
  "att-view",
42
+ "att-wait",
37
43
  "atts",
38
44
  "avatar",
39
45
  "badges",
@@ -84,6 +90,7 @@
84
90
  "fg",
85
91
  "field",
86
92
  "fill",
93
+ "folded",
87
94
  "form-grid",
88
95
  "friendly",
89
96
  "full",
@@ -135,6 +142,7 @@
135
142
  "nb-scrim",
136
143
  "nb-side",
137
144
  "nm",
145
+ "notice",
138
146
  "nowrap",
139
147
  "num",
140
148
  "ok",
@@ -220,6 +228,7 @@
220
228
  "agentoptions",
221
229
  "app",
222
230
  "att-cap",
231
+ "att-converted",
223
232
  "att-html",
224
233
  "att-htmlbox",
225
234
  "att-ic",
@@ -229,7 +238,9 @@
229
238
  "att-more",
230
239
  "att-msg",
231
240
  "att-name",
241
+ "att-office",
232
242
  "att-pdf",
243
+ "att-sheet",
233
244
  "att-size",
234
245
  "att-table",
235
246
  "att-text",
@@ -237,6 +248,7 @@
237
248
  "att-tile",
238
249
  "att-title",
239
250
  "att-view",
251
+ "att-wait",
240
252
  "avatar",
241
253
  "brand",
242
254
  "btn",
package/dist/styles.css CHANGED
@@ -622,6 +622,19 @@ textarea.inp {
622
622
  background: var(--surface-2);
623
623
  border-top-left-radius: 4px;
624
624
  }
625
+ /* A notice of a product (FTR.NAB.CHAT-0002 design §1): a card with a stripe, not a bubble of the agent. */
626
+ .m.a.notice .bub {
627
+ border: 1px solid var(--border);
628
+ border-left: 3px solid var(--border-strong);
629
+ border-radius: 4px var(--r-m) var(--r-m) var(--r-m);
630
+ }
631
+ .m.a.notice .bub.folded > :not(.textbtn) {
632
+ max-height: calc(12 * 1.5em);
633
+ overflow: hidden;
634
+ }
635
+ .m.a.notice .textbtn {
636
+ margin-top: 4px;
637
+ }
625
638
  .m.u {
626
639
  align-self: flex-end;
627
640
  }
@@ -1443,3 +1456,10 @@ select.inp.inherit {
1443
1456
  .att-table th{background:var(--surface-2);font-weight:600;position:sticky;top:0}
1444
1457
  .att-more{margin-top:8px;font-size:12px;color:var(--muted)}
1445
1458
  .att-text{max-height:70vh;overflow:auto;margin:0;font-family:var(--mono);font-size:12px;white-space:pre-wrap;overflow-wrap:anywhere}
1459
+ /* Documents and spreadsheets (FTR.NAB.CHAT-0003 design §3.2–3.3) */
1460
+ .att-office{display:flex;flex-direction:column;gap:8px;min-width:0}
1461
+ .att-converted{font-size:12px;color:var(--muted)}
1462
+ .att-wait{flex-direction:column;justify-content:center;min-height:200px;text-align:center}
1463
+ .att-sheet tbody th{position:sticky;left:0;background:var(--surface-2);color:var(--muted);font-weight:400}
1464
+ .att-sheet td.att-num{text-align:right}
1465
+ .att-sheet td.att-formula{color:var(--muted);font-style:italic}
@@ -167,8 +167,32 @@ function m({ text: e }) {
167
167
  });
168
168
  }
169
169
  //#endregion
170
+ //#region src/components/Tabs.tsx
171
+ function h({ items: e, value: n, onChange: r, label: i }) {
172
+ let a = s(null);
173
+ return /* @__PURE__ */ t("div", {
174
+ className: "tabs",
175
+ role: "tablist",
176
+ "aria-label": i,
177
+ ref: a,
178
+ onKeyDown: (t) => {
179
+ let i = e.findIndex((e) => e.key === n), o = t.key === "ArrowRight" ? (i + 1) % e.length : t.key === "ArrowLeft" ? (i - 1 + e.length) % e.length : t.key === "Home" ? 0 : t.key === "End" ? e.length - 1 : -1;
180
+ o < 0 || (t.preventDefault(), r(e[o].key), a.current?.querySelectorAll("[role=\"tab\"]")[o]?.focus());
181
+ },
182
+ children: e.map((e) => /* @__PURE__ */ t("button", {
183
+ type: "button",
184
+ role: "tab",
185
+ "aria-selected": e.key === n,
186
+ tabIndex: e.key === n ? 0 : -1,
187
+ className: e.key === n ? "on" : void 0,
188
+ onClick: () => r(e.key),
189
+ children: e.label
190
+ }, e.key))
191
+ });
192
+ }
193
+ //#endregion
170
194
  //#region src/components/ui.tsx
171
- function h({ title: e, onClose: r, children: i, footer: a, wide: c = !1 }) {
195
+ function g({ title: e, onClose: r, children: i, footer: a, wide: c = !1 }) {
172
196
  let l = s(null);
173
197
  return o(() => {
174
198
  let e = (e) => e.key === "Escape" && r();
@@ -192,8 +216,8 @@ function h({ title: e, onClose: r, children: i, footer: a, wide: c = !1 }) {
192
216
  })
193
217
  });
194
218
  }
195
- var g = r(() => {});
196
- function _({ children: r }) {
219
+ var _ = r(() => {});
220
+ function v({ children: r }) {
197
221
  let [a, o] = c([]), l = s(1), d = i((e) => o((t) => t.filter((t) => t.id !== e)), []), f = i((e) => {
198
222
  let t = l.current++;
199
223
  o((n) => [...n.slice(-3), {
@@ -201,7 +225,7 @@ function _({ children: r }) {
201
225
  id: t
202
226
  }]), !e.sticky && !e.actions && setTimeout(() => d(t), 6e3);
203
227
  }, [d]), p = e()("close");
204
- return /* @__PURE__ */ n(g.Provider, {
228
+ return /* @__PURE__ */ n(_.Provider, {
205
229
  value: f,
206
230
  children: [r, /* @__PURE__ */ t("div", {
207
231
  className: "toast-wrap",
@@ -248,12 +272,12 @@ function _({ children: r }) {
248
272
  })]
249
273
  });
250
274
  }
251
- var v = () => a(g);
252
- function y(e) {
275
+ var y = () => a(_);
276
+ function b(e) {
253
277
  let t = e.trim().split(/\s+/).filter(Boolean);
254
278
  return t.length === 0 ? "?" : t.length === 1 ? t[0].slice(0, 2).toUpperCase() : (t[0][0] + t[1][0]).toUpperCase();
255
279
  }
256
- function b({ name: e, url: n, small: r, agent: i, icon: a, variant: o }) {
280
+ function x({ name: e, url: n, small: r, agent: i, icon: a, variant: o }) {
257
281
  let s = `avatar${r ? " s" : ""}${i ? " agent" : ""}${i && o ? ` ${o}` : ""}`;
258
282
  return /* @__PURE__ */ t("span", {
259
283
  className: s,
@@ -264,10 +288,10 @@ function b({ name: e, url: n, small: r, agent: i, icon: a, variant: o }) {
264
288
  }) : i && a ? /* @__PURE__ */ t(u, {
265
289
  name: a,
266
290
  size: r ? 14 : 18
267
- }) : i ? e.slice(0, 1).toUpperCase() : y(e)
291
+ }) : i ? e.slice(0, 1).toUpperCase() : b(e)
268
292
  });
269
293
  }
270
- function x({ on: e, onChange: r, label: i, disabled: a }) {
294
+ function S({ on: e, onChange: r, label: i, disabled: a }) {
271
295
  return /* @__PURE__ */ n("button", {
272
296
  type: "button",
273
297
  className: "switch",
@@ -278,7 +302,7 @@ function x({ on: e, onChange: r, label: i, disabled: a }) {
278
302
  children: [/* @__PURE__ */ t("span", { className: `sw${e ? " on" : ""}` }), i]
279
303
  });
280
304
  }
281
- function S({ icon: e, title: r, children: i }) {
305
+ function C({ icon: e, title: r, children: i }) {
282
306
  return /* @__PURE__ */ n("div", {
283
307
  className: "empty dashed",
284
308
  children: [
@@ -291,14 +315,14 @@ function S({ icon: e, title: r, children: i }) {
291
315
  ]
292
316
  });
293
317
  }
294
- function C() {
318
+ function w() {
295
319
  let n = e();
296
320
  return /* @__PURE__ */ t("div", {
297
321
  className: "loading",
298
322
  children: n("loading")
299
323
  });
300
324
  }
301
- function w(e, t) {
325
+ function T(e, t) {
302
326
  let n = s(null);
303
327
  return o(() => {
304
328
  if (!e) return;
@@ -309,6 +333,6 @@ function w(e, t) {
309
333
  }, [e, t]), n;
310
334
  }
311
335
  //#endregion
312
- export { x as a, v as c, u as d, h as i, m as l, S as n, _ as o, C as r, w as s, b as t, d as u };
336
+ export { S as a, y as c, d, u as f, g as i, h as l, C as n, v as o, w as r, T as s, x as t, m as u };
313
337
 
314
- //# sourceMappingURL=ui-DvmjcG-d.js.map
338
+ //# sourceMappingURL=ui-sV5t0cp1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-sV5t0cp1.js","names":["useKitT","PATHS","Icon","className","size","name","GitHubIcon","inline","out","re","last","m","i","text","tok","k","key","cells","row","c","Markdown","lines","blocks","n","line","body","h","Tag","head","rows","j","r","ri","ordered","items","it","para","Tabs","ref","useRef","label","value","to","e","onChange","Modal","useEffect","onKey","onClose","wide","title","footer","ToastCtx","createContext","ToastProvider","toasts","setToasts","useState","next","dismiss","useCallback","ts","id","push","t","close","children","a","useToast","useContext","initials","parts","Avatar","cls","small","agent","variant","url","icon","Switch","on","Empty","Loading","useOutside","open"],"sources":["../src/components/Icon.tsx","../src/components/Markdown.tsx","../src/components/Tabs.tsx","../src/components/ui.tsx"],"sourcesContent":["// Icon set of the product family, rendered inline: the stroke icons of both products\n// (FTR.NAB.CMN-0005 design §2). Where the drawings differed, the one of Nabu is kept.\n\nconst PATHS = {\n user: '<circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4 21c0-4 3.6-6 8-6s8 2 8 6\"/>',\n hash: '<path d=\"M5 9h14M5 15h14M10 4 8 20M16 4l-2 16\"/>',\n graph: '<circle cx=\"6\" cy=\"7\" r=\"2.5\"/><circle cx=\"18\" cy=\"6\" r=\"2.5\"/><circle cx=\"12\" cy=\"18\" r=\"2.5\"/><path d=\"M8.3 8l2.5 7.8M16 7.8l-3 8M8.5 6.8l7-.6\"/>',\n table: '<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"M3 10h18M3 15h18M9 4v16\"/>',\n ext: '<path d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5\"/>',\n pause: '<path d=\"M8 5v14M16 5v14\"/>',\n search: '<circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-3.5-3.5\"/>',\n mail: '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"m4 7 8 6 8-6\"/>',\n archive: '<rect x=\"3\" y=\"4\" width=\"18\" height=\"5\" rx=\"1\"/><path d=\"M5 9v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V9M10 13h4\"/>',\n key: '<circle cx=\"8\" cy=\"15\" r=\"4\"/><path d=\"m11 12 9-9M16 7l3 3M14 9l2 2\"/>',\n gear: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1\"/>',\n mic: '<rect x=\"9\" y=\"3\" width=\"6\" height=\"11\" rx=\"3\"/><path d=\"M5 11a7 7 0 0 0 14 0M12 18v3\"/>',\n clip: '<path d=\"m21 11-8.5 8.5a5 5 0 0 1-7-7L14 4a3.5 3.5 0 0 1 5 5l-8.5 8.5a2 2 0 0 1-3-3L15 7\"/>',\n send: '<path d=\"M5 12h14M13 6l6 6-6 6\"/>',\n x: '<path d=\"M6 6l12 12M18 6 6 18\"/>',\n menu: '<path d=\"M4 7h16M4 12h16M4 17h16\"/>',\n check: '<path d=\"m5 12 5 5 9-10\"/>',\n lock: '<rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"/><path d=\"M8 11V8a4 4 0 0 1 8 0v3\"/>',\n branch: '<circle cx=\"6\" cy=\"5\" r=\"2\"/><circle cx=\"6\" cy=\"19\" r=\"2\"/><circle cx=\"18\" cy=\"8\" r=\"2\"/><path d=\"M6 7v10M18 10c0 5-8 4-11 7\"/>',\n plus: '<path d=\"M12 5v14M5 12h14\"/>',\n back: '<path d=\"M19 12H5M11 6l-6 6 6 6\"/>',\n files: '<path d=\"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z\"/><path d=\"M14 3v5h5\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"8\"/><path d=\"M12 8v4l3 2\"/>',\n msg: '<path d=\"M4 5h16v11H9l-5 4z\"/>',\n out: '<path d=\"M15 4h4v16h-4M10 8l-4 4 4 4M6 12h10\"/>',\n users: '<circle cx=\"9\" cy=\"8\" r=\"3\"/><path d=\"M3 20a6 6 0 0 1 12 0M16 5a3 3 0 0 1 0 6M21 20a6 6 0 0 0-4-5.6\"/>',\n grid: '<rect x=\"4\" y=\"4\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"13\" y=\"4\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"4\" y=\"13\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"13\" y=\"13\" width=\"7\" height=\"7\" rx=\"1\"/>',\n book: '<path d=\"M5 4h11a3 3 0 0 1 3 3v13H8a3 3 0 0 1-3-3z\"/><path d=\"M5 17a3 3 0 0 1 3-3h11\"/>',\n wrench: '<path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.8-3.8a6 6 0 0 1-7.9 7.9l-6.9 6.9a2.1 2.1 0 0 1-3-3l6.9-6.9a6 6 0 0 1 7.9-7.9z\"/>',\n upload: '<path d=\"M12 16V4M7 9l5-5 5 5M5 20h14\"/>',\n dots: '<circle cx=\"5\" cy=\"12\" r=\"1.3\"/><circle cx=\"12\" cy=\"12\" r=\"1.3\"/><circle cx=\"19\" cy=\"12\" r=\"1.3\"/>',\n trash: '<path d=\"M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13M10 11v6M14 11v6\"/>',\n cpu: '<rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" rx=\"1.5\"/><rect x=\"10\" y=\"10\" width=\"4\" height=\"4\"/><path d=\"M10 3v4M14 3v4M10 17v4M14 17v4M3 10h4M3 14h4M17 10h4M17 14h4\"/>',\n alert: '<path d=\"M12 4 2 20h20z\"/><path d=\"M12 10v4M12 17v.5\"/>',\n sparkle: '<path d=\"M12 3v4M12 17v4M3 12h4M17 12h4M6 6l2.5 2.5M15.5 15.5 18 18M6 18l2.5-2.5M15.5 8.5 18 6\"/>',\n stop: '<rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" rx=\"1.5\"/>',\n bulb: '<path d=\"M9 18h6M10 21h4M12 3a6 6 0 0 0-3.5 10.9c.6.5 1 1.2 1 2.1h5c0-.9.4-1.6 1-2.1A6 6 0 0 0 12 3z\"/>',\n bug: '<rect x=\"8\" y=\"7\" width=\"8\" height=\"12\" rx=\"4\"/><path d=\"M12 7V5M9 5l1.5 2M15 5l-1.5 2M4 11h4M16 11h4M4 17l4-2M20 17l-4-2\"/>',\n rocket: '<path d=\"M5 15c-1.5 1.5-2 4-2 6 2 0 4.5-.5 6-2M9 15l-3-3c1.5-5 5.5-8 12-9-1 6.5-4 10.5-9 12z\"/><circle cx=\"14.5\" cy=\"9.5\" r=\"1.5\"/>',\n undo: '<path d=\"M9 14 4 9l5-5\"/><path d=\"M4 9h10a6 6 0 0 1 0 12h-3\"/>',\n reset: '<path d=\"M3 12a9 9 0 1 0 3-6.7L3 8M3 3v5h5\"/>',\n flag: '<path d=\"M5 21V4M5 4h11l-2 4 2 4H5\"/>',\n code: '<path d=\"m8 8-4 4 4 4M16 8l4 4-4 4M13 5l-2 14\"/>',\n flask: '<path d=\"M9 3h6M10 3v6L5 19a1.5 1.5 0 0 0 1.3 2h11.4a1.5 1.5 0 0 0 1.3-2l-5-10V3\"/>',\n target: '<circle cx=\"12\" cy=\"12\" r=\"8\"/><circle cx=\"12\" cy=\"12\" r=\"4\"/><circle cx=\"12\" cy=\"12\" r=\".6\"/>',\n merge: '<circle cx=\"6\" cy=\"5\" r=\"2\"/><circle cx=\"6\" cy=\"19\" r=\"2\"/><circle cx=\"18\" cy=\"19\" r=\"2\"/><path d=\"M6 7v10M6 7c0 6 12 4 12 10\"/>',\n server: '<rect x=\"4\" y=\"4\" width=\"16\" height=\"7\" rx=\"1.5\"/><rect x=\"4\" y=\"13\" width=\"16\" height=\"7\" rx=\"1.5\"/><path d=\"M8 7.5h.01M8 16.5h.01\"/>',\n copy: '<rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\"/><path d=\"M5 15V5a2 2 0 0 1 2-2h8\"/>',\n briefcase: '<rect x=\"3\" y=\"7\" width=\"18\" height=\"13\" rx=\"2\"/><path d=\"M9 7V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2M3 13h18\"/>',\n smile: '<circle cx=\"12\" cy=\"12\" r=\"8\"/><path d=\"M8.5 14a4 4 0 0 0 7 0M9.5 10h.01M14.5 10h.01\"/>',\n bolt: '<path d=\"M13 3 5 14h6l-1 7 8-11h-6z\"/>',\n link: '<path d=\"M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1\"/><path d=\"M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1\"/>',\n refresh: '<path d=\"M20 11a8 8 0 0 0-14.5-4.5L4 8M4 4v4h4M4 13a8 8 0 0 0 14.5 4.5L20 16M20 20v-4h-4\"/>',\n // drawings for the avatar of an agent and the icons that came with Nabu\n tBusiness: '<rect x=\"3\" y=\"7\" width=\"18\" height=\"13\" rx=\"2\"/><path d=\"M9 7V5h6v2M3 12h18\"/>',\n tFriendly: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M8 14c1 1.5 2.4 2.2 4 2.2s3-.7 4-2.2M9 9.5h.01M15 9.5h.01\"/>',\n tBrief: '<path d=\"M13 3L5 13h6l-1 8 8-10h-6z\"/>',\n tMentor: '<path d=\"M3 6c3-1 6-1 9 1 3-2 6-2 9-1v13c-3-1-6-1-9 1-3-2-6-2-9-1zM12 7v13\"/>',\n tg: '<path d=\"M3 11l18-7-3 16-6-5-3 3v-5l9-7-11 6z\"/>',\n msg2: '<path d=\"M4 5h16v11H8l-4 4z\"/>',\n plug: '<path d=\"M9 3v5M15 3v5M6 8h12v3a6 6 0 0 1-12 0zM12 17v4\"/>',\n repeat: '<path d=\"M17 2l3 3-3 3M4 11V9a4 4 0 0 1 4-4h12M7 22l-3-3 3-3M20 13v2a4 4 0 0 1-4 4H4\"/>',\n shield: '<path d=\"M12 3l8 3v6c0 5-4 8-8 9-4-1-8-4-8-9V6z\"/>',\n box: '<path d=\"M3 7l9-4 9 4v10l-9 4-9-4zM3 7l9 4 9-4M12 11v10\"/>',\n brain: '<path d=\"M9 4a3 3 0 0 0-3 3 3 3 0 0 0-2 5 3 3 0 0 0 2 5 3 3 0 0 0 6 1V5a3 3 0 0 0-3-1zM15 4a3 3 0 0 1 3 3 3 3 0 0 1 2 5 3 3 0 0 1-2 5 3 3 0 0 1-6 1\"/>',\n chart: '<path d=\"M4 20h16M6 16l4-5 3 3 5-7\"/>',\n play: '<path d=\"M7 5l12 7-12 7z\"/>',\n spark: '<path d=\"M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z\"/>',\n tag: '<path d=\"M3 12V4h8l9 9-8 8z\"/><circle cx=\"7.5\" cy=\"8.5\" r=\"1.3\"/>',\n globe: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18\"/>',\n download: '<path d=\"M12 4v12M7 11l5 5 5-5M5 20h14\"/>',\n pdf: '<path d=\"M6 3h9l4 4v14H6z\"/><path d=\"M15 3v4h4M9 12h6M9 15.5h6M9 19h3\"/>',\n markdown: '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M7 15V9l2.5 3L12 9v6M16 9v6M14 13l2 2 2-2\"/>',\n source: '<path d=\"M6 3h9l4 4v14H6z\"/><path d=\"M15 3v4h4M10.5 11l-2 2.5 2 2.5M13.5 11l2 2.5-2 2.5\"/>',\n pin: '<path d=\"M9 4h6l-1 6 4 4H6l4-4zM12 14v6\"/>',\n edit: '<path d=\"M4 20h4L19 9l-4-4L4 16zM14 6l4 4\"/>',\n image: '<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><circle cx=\"9\" cy=\"10\" r=\"2\"/><path d=\"m21 16-5-5-9 9\"/>',\n compress: '<path d=\"M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7\"/>',\n // a double chevron to the right: a panel folds to the right edge (FTR.HMR.SPEC-0001 R8)\n chevrons: '<path d=\"m6 6 6 6-6 6M13 6l6 6-6 6\"/>',\n} as const;\n\nexport type IconName = keyof typeof PATHS;\n\nexport function Icon({ name, size = 18, className = \"\" }: { name: IconName; size?: number; className?: string }) {\n return (\n <svg\n className={`i ${className}`}\n viewBox=\"0 0 24 24\"\n style={{ width: size, height: size }}\n aria-hidden=\"true\"\n dangerouslySetInnerHTML={{ __html: PATHS[name] }}\n />\n );\n}\n\nexport function GitHubIcon() {\n return (\n <svg className=\"i\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" style={{ fill: \"currentColor\", stroke: \"none\" }}>\n <path d=\"M12 2a10 10 0 0 0-3.2 19.5c.5.1.7-.2.7-.5v-1.7c-2.8.6-3.4-1.3-3.4-1.3-.5-1.2-1.1-1.5-1.1-1.5-.9-.6.1-.6.1-.6 1 .1 1.5 1 1.5 1 .9 1.5 2.4 1.1 2.9.8.1-.6.4-1.1.6-1.3-2.2-.3-4.6-1.1-4.6-5a3.9 3.9 0 0 1 1-2.7 3.6 3.6 0 0 1 .1-2.7s.8-.3 2.8 1a9.6 9.6 0 0 1 5 0c1.9-1.3 2.8-1 2.8-1 .5 1.4.2 2.4.1 2.7a3.9 3.9 0 0 1 1 2.7c0 3.9-2.4 4.7-4.6 5 .4.3.7.9.7 1.9V21c0 .3.2.6.7.5A10 10 0 0 0 12 2z\" />\n </svg>\n );\n}\n\n/** Names of all icons, for the showcase. */\nexport const ICON_NAMES = Object.keys(PATHS) as IconName[];\n","import type { ReactNode } from \"react\";\n\n// A small read-only Markdown renderer for answers of an agent and generated\n// documents: headings, paragraphs, lists, GFM tables, code fences,\n// bold, italic and inline code. It builds React elements (no raw HTML), so\n// content written by the agent cannot inject markup.\n\nfunction inline(text: string, key: string): ReactNode[] {\n const out: ReactNode[] = [];\n const re = /(`[^`]+`|\\*\\*[^*]+\\*\\*|\\*[^*]+\\*|_[^_]+_)/g;\n let last = 0;\n let m: RegExpExecArray | null;\n let i = 0;\n while ((m = re.exec(text))) {\n if (m.index > last) out.push(text.slice(last, m.index));\n const tok = m[0];\n const k = `${key}-${i++}`;\n if (tok.startsWith(\"`\")) out.push(<code key={k}>{tok.slice(1, -1)}</code>);\n else if (tok.startsWith(\"**\")) out.push(<b key={k}>{tok.slice(2, -2)}</b>);\n else out.push(<i key={k}>{tok.slice(1, -1)}</i>);\n last = m.index + tok.length;\n }\n if (last < text.length) out.push(text.slice(last));\n return out;\n}\n\nconst cells = (row: string) => row.trim().replace(/^\\||\\|$/g, \"\").split(\"|\").map((c) => c.trim());\n\nexport function Markdown({ text }: { text: string }) {\n const lines = text.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const blocks: ReactNode[] = [];\n let i = 0;\n let n = 0;\n while (i < lines.length) {\n const line = lines[i];\n const k = `b${n++}`;\n if (/^\\s*(```|~~~)/.test(line)) {\n const body: string[] = [];\n i++;\n while (i < lines.length && !/^\\s*(```|~~~)/.test(lines[i])) body.push(lines[i++]);\n i++;\n blocks.push(<pre key={k}><code>{body.join(\"\\n\")}</code></pre>);\n continue;\n }\n const h = /^(#{1,6})\\s+(.*)$/.exec(line);\n if (h) {\n const level = Math.min(6, h[1].length + 2);\n const Tag = `h${level}` as \"h3\";\n blocks.push(<Tag key={k}>{inline(h[2], k)}</Tag>);\n i++;\n continue;\n }\n if (line.trim().startsWith(\"|\") && i + 1 < lines.length && /^\\s*\\|?\\s*:?-{2,}/.test(lines[i + 1])) {\n const head = cells(line);\n i += 2;\n const rows: string[][] = [];\n while (i < lines.length && lines[i].trim().startsWith(\"|\")) rows.push(cells(lines[i++]));\n blocks.push(\n <table key={k} className=\"cov\">\n <thead><tr>{head.map((c, j) => <th key={j}>{inline(c, `${k}h${j}`)}</th>)}</tr></thead>\n <tbody>{rows.map((r, ri) => <tr key={ri}>{r.map((c, j) => <td key={j}>{inline(c, `${k}r${ri}c${j}`)}</td>)}</tr>)}</tbody>\n </table>,\n );\n continue;\n }\n if (/^\\s*([-*+]|\\d+[.)])\\s+/.test(line)) {\n const ordered = /^\\s*\\d/.test(line);\n const items: string[] = [];\n while (i < lines.length && /^\\s*([-*+]|\\d+[.)])\\s+/.test(lines[i])) items.push(lines[i++].replace(/^\\s*([-*+]|\\d+[.)])\\s+/, \"\"));\n const Tag = ordered ? \"ol\" : \"ul\";\n blocks.push(<Tag key={k}>{items.map((it, j) => <li key={j}>{inline(it, `${k}${j}`)}</li>)}</Tag>);\n continue;\n }\n if (!line.trim()) {\n i++;\n continue;\n }\n const para: string[] = [];\n while (i < lines.length && lines[i].trim() && !/^(#{1,6}\\s|\\s*(```|~~~|\\||[-*+]\\s|\\d+[.)]\\s))/.test(lines[i])) para.push(lines[i++]);\n if (para.length === 0) para.push(lines[i++]);\n blocks.push(<p key={k}>{inline(para.join(\" \"), k)}</p>);\n }\n return <div className=\"prose\">{blocks}</div>;\n}\n","import { useRef, type KeyboardEvent, type ReactNode } from \"react\";\n\n/** `.tabs` with the keyboard of a tab list: arrows, Home and End move the choice. */\nexport function Tabs<K extends string>({ items, value, onChange, label }: {\n items: { key: K; label: ReactNode }[]; value: K; onChange: (key: K) => void; label?: string;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const onKey = (e: KeyboardEvent) => {\n const i = items.findIndex((it) => it.key === value);\n const to = e.key === \"ArrowRight\" ? (i + 1) % items.length\n : e.key === \"ArrowLeft\" ? (i - 1 + items.length) % items.length\n : e.key === \"Home\" ? 0 : e.key === \"End\" ? items.length - 1 : -1;\n if (to < 0) return;\n e.preventDefault();\n onChange(items[to].key);\n ref.current?.querySelectorAll<HTMLElement>('[role=\"tab\"]')[to]?.focus();\n };\n return (\n <div className=\"tabs\" role=\"tablist\" aria-label={label} ref={ref} onKeyDown={onKey}>\n {items.map((it) => (\n <button key={it.key} type=\"button\" role=\"tab\" aria-selected={it.key === value} tabIndex={it.key === value ? 0 : -1}\n className={it.key === value ? \"on\" : undefined} onClick={() => onChange(it.key)}>\n {it.label}\n </button>\n ))}\n </div>\n );\n}\n","import { createContext, useCallback, useContext, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useKitT } from \"../i18n\";\nimport { Icon, type IconName } from \"./Icon\";\n\n// ─── Modal ─────────────────────────────────────────────────────────\n\nexport function Modal({ title, onClose, children, footer, wide = false }: {\n title: ReactNode; onClose: () => void; children: ReactNode; footer?: ReactNode; wide?: boolean;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n document.addEventListener(\"keydown\", onKey);\n ref.current?.querySelector<HTMLElement>(\"input, textarea, select, button.primary\")?.focus();\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [onClose]);\n return (\n <div className=\"overlay\" onMouseDown={(e) => e.target === e.currentTarget && onClose()}>\n <div className={`modal${wide ? \" wide\" : \"\"}`} role=\"dialog\" aria-modal=\"true\" ref={ref}>\n <header>{title}</header>\n <div className=\"mb\">{children}</div>\n {footer && <footer>{footer}</footer>}\n </div>\n </div>\n );\n}\n\n// ─── Toasts ────────────────────────────────────────────────────────\n\nexport interface ToastSpec {\n kind?: \"error\" | \"ok\" | \"info\";\n title: string;\n text?: ReactNode;\n actions?: { label: string; primary?: boolean; onClick: () => void }[];\n sticky?: boolean;\n}\n\nconst ToastCtx = createContext<(t: ToastSpec) => void>(() => {});\n\nexport function ToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<(ToastSpec & { id: number })[]>([]);\n const next = useRef(1);\n const dismiss = useCallback((id: number) => setToasts((ts) => ts.filter((t) => t.id !== id)), []);\n const push = useCallback((t: ToastSpec) => {\n const id = next.current++;\n setToasts((ts) => [...ts.slice(-3), { ...t, id }]);\n if (!t.sticky && !t.actions) setTimeout(() => dismiss(id), 6000);\n }, [dismiss]);\n const close = useKitT()(\"close\");\n return (\n <ToastCtx.Provider value={push}>\n {children}\n <div className=\"toast-wrap\" aria-live=\"polite\">\n {toasts.map((t) => (\n <div key={t.id} className={`toast ${t.kind ?? \"info\"}`} role={t.kind === \"error\" ? \"alert\" : \"status\"}>\n <div className=\"row\" style={{ alignItems: \"flex-start\", flexWrap: \"nowrap\" }}>\n <div className=\"grow\">\n <b>{t.title}</b>\n {t.text && <span className=\"small t2\">{t.text}</span>}\n </div>\n <button className=\"iconbtn\" style={{ width: 24, height: 24 }} onClick={() => dismiss(t.id)} aria-label={close}>\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n {t.actions && (\n <div className=\"acts\">\n {t.actions.map((a) => (\n <button key={a.label} className={`btn sm${a.primary ? \" primary\" : \"\"}`} onClick={() => { dismiss(t.id); a.onClick(); }}>\n {a.label}\n </button>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n </ToastCtx.Provider>\n );\n}\n\nexport const useToast = () => useContext(ToastCtx);\n\n// ─── Small pieces ──────────────────────────────────────────────────\n\n/** Two letters of a name for an avatar without a picture. */\nexport function initials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[1][0]).toUpperCase();\n}\n\n/** The avatar of a user or of an agent. What an agent looks like is decided by the\n * product (R7): it gives the icon and the colour variant — a class beside `.avatar.agent`. */\nexport function Avatar({ name, url, small, agent, icon, variant }: {\n name: string; url?: string | null; small?: boolean; agent?: boolean; icon?: IconName; variant?: string;\n}) {\n const cls = `avatar${small ? \" s\" : \"\"}${agent ? \" agent\" : \"\"}${agent && variant ? ` ${variant}` : \"\"}`;\n return (\n <span className={cls} aria-hidden=\"true\">\n {url ? <img src={url} alt=\"\" />\n : agent && icon ? <Icon name={icon} size={small ? 14 : 18} />\n : agent ? name.slice(0, 1).toUpperCase() : initials(name)}\n </span>\n );\n}\n\nexport function Switch({ on, onChange, label, disabled }: { on: boolean; onChange: (v: boolean) => void; label?: ReactNode; disabled?: boolean }) {\n return (\n <button type=\"button\" className=\"switch\" role=\"switch\" aria-checked={on} disabled={disabled} onClick={() => onChange(!on)}>\n <span className={`sw${on ? \" on\" : \"\"}`} />\n {label}\n </button>\n );\n}\n\nexport function Empty({ icon, title, children }: { icon: IconName; title: ReactNode; children?: ReactNode }) {\n return (\n <div className=\"empty dashed\">\n <div className=\"ic\"><Icon name={icon} /></div>\n <b>{title}</b>\n {children}\n </div>\n );\n}\n\nexport function Loading() {\n const t = useKitT();\n return <div className=\"loading\">{t(\"loading\")}</div>;\n}\n\n/** Popover menu closed by an outside click. */\nexport function useOutside<T extends HTMLElement>(open: boolean, close: () => void) {\n const ref = useRef<T>(null);\n useEffect(() => {\n if (!open) return;\n const h = (e: MouseEvent) => ref.current && !ref.current.contains(e.target as Node) && close();\n const k = (e: KeyboardEvent) => e.key === \"Escape\" && close();\n document.addEventListener(\"mousedown\", h);\n document.addEventListener(\"keydown\", k);\n return () => {\n document.removeEventListener(\"mousedown\", h);\n document.removeEventListener(\"keydown\", k);\n };\n }, [open, close]);\n return ref;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@green-on-grey/ui-kit",
3
- "version": "1.8.0",
3
+ "version": "1.10.0",
4
4
  "description": "UI kit of the Nabu and Hammurapi products: styles, components, the chat and the sign-in screen",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-DvmjcG-d.js","names":["useKitT","PATHS","Icon","className","size","name","GitHubIcon","inline","out","re","last","m","i","text","tok","k","key","cells","row","c","Markdown","lines","blocks","n","line","body","h","Tag","head","rows","j","r","ri","ordered","items","it","para","Modal","ref","useRef","useEffect","onKey","onClose","wide","title","footer","ToastCtx","createContext","ToastProvider","toasts","setToasts","useState","next","dismiss","useCallback","ts","id","push","t","close","children","a","useToast","useContext","initials","parts","Avatar","cls","small","agent","variant","url","icon","Switch","on","onChange","label","Empty","Loading","useOutside","open"],"sources":["../src/components/Icon.tsx","../src/components/Markdown.tsx","../src/components/ui.tsx"],"sourcesContent":["// Icon set of the product family, rendered inline: the stroke icons of both products\n// (FTR.NAB.CMN-0005 design §2). Where the drawings differed, the one of Nabu is kept.\n\nconst PATHS = {\n user: '<circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4 21c0-4 3.6-6 8-6s8 2 8 6\"/>',\n hash: '<path d=\"M5 9h14M5 15h14M10 4 8 20M16 4l-2 16\"/>',\n graph: '<circle cx=\"6\" cy=\"7\" r=\"2.5\"/><circle cx=\"18\" cy=\"6\" r=\"2.5\"/><circle cx=\"12\" cy=\"18\" r=\"2.5\"/><path d=\"M8.3 8l2.5 7.8M16 7.8l-3 8M8.5 6.8l7-.6\"/>',\n table: '<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"M3 10h18M3 15h18M9 4v16\"/>',\n ext: '<path d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5\"/>',\n pause: '<path d=\"M8 5v14M16 5v14\"/>',\n search: '<circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-3.5-3.5\"/>',\n mail: '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"m4 7 8 6 8-6\"/>',\n archive: '<rect x=\"3\" y=\"4\" width=\"18\" height=\"5\" rx=\"1\"/><path d=\"M5 9v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V9M10 13h4\"/>',\n key: '<circle cx=\"8\" cy=\"15\" r=\"4\"/><path d=\"m11 12 9-9M16 7l3 3M14 9l2 2\"/>',\n gear: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1\"/>',\n mic: '<rect x=\"9\" y=\"3\" width=\"6\" height=\"11\" rx=\"3\"/><path d=\"M5 11a7 7 0 0 0 14 0M12 18v3\"/>',\n clip: '<path d=\"m21 11-8.5 8.5a5 5 0 0 1-7-7L14 4a3.5 3.5 0 0 1 5 5l-8.5 8.5a2 2 0 0 1-3-3L15 7\"/>',\n send: '<path d=\"M5 12h14M13 6l6 6-6 6\"/>',\n x: '<path d=\"M6 6l12 12M18 6 6 18\"/>',\n menu: '<path d=\"M4 7h16M4 12h16M4 17h16\"/>',\n check: '<path d=\"m5 12 5 5 9-10\"/>',\n lock: '<rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\"/><path d=\"M8 11V8a4 4 0 0 1 8 0v3\"/>',\n branch: '<circle cx=\"6\" cy=\"5\" r=\"2\"/><circle cx=\"6\" cy=\"19\" r=\"2\"/><circle cx=\"18\" cy=\"8\" r=\"2\"/><path d=\"M6 7v10M18 10c0 5-8 4-11 7\"/>',\n plus: '<path d=\"M12 5v14M5 12h14\"/>',\n back: '<path d=\"M19 12H5M11 6l-6 6 6 6\"/>',\n files: '<path d=\"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z\"/><path d=\"M14 3v5h5\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"8\"/><path d=\"M12 8v4l3 2\"/>',\n msg: '<path d=\"M4 5h16v11H9l-5 4z\"/>',\n out: '<path d=\"M15 4h4v16h-4M10 8l-4 4 4 4M6 12h10\"/>',\n users: '<circle cx=\"9\" cy=\"8\" r=\"3\"/><path d=\"M3 20a6 6 0 0 1 12 0M16 5a3 3 0 0 1 0 6M21 20a6 6 0 0 0-4-5.6\"/>',\n grid: '<rect x=\"4\" y=\"4\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"13\" y=\"4\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"4\" y=\"13\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"13\" y=\"13\" width=\"7\" height=\"7\" rx=\"1\"/>',\n book: '<path d=\"M5 4h11a3 3 0 0 1 3 3v13H8a3 3 0 0 1-3-3z\"/><path d=\"M5 17a3 3 0 0 1 3-3h11\"/>',\n wrench: '<path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.8-3.8a6 6 0 0 1-7.9 7.9l-6.9 6.9a2.1 2.1 0 0 1-3-3l6.9-6.9a6 6 0 0 1 7.9-7.9z\"/>',\n upload: '<path d=\"M12 16V4M7 9l5-5 5 5M5 20h14\"/>',\n dots: '<circle cx=\"5\" cy=\"12\" r=\"1.3\"/><circle cx=\"12\" cy=\"12\" r=\"1.3\"/><circle cx=\"19\" cy=\"12\" r=\"1.3\"/>',\n trash: '<path d=\"M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13M10 11v6M14 11v6\"/>',\n cpu: '<rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" rx=\"1.5\"/><rect x=\"10\" y=\"10\" width=\"4\" height=\"4\"/><path d=\"M10 3v4M14 3v4M10 17v4M14 17v4M3 10h4M3 14h4M17 10h4M17 14h4\"/>',\n alert: '<path d=\"M12 4 2 20h20z\"/><path d=\"M12 10v4M12 17v.5\"/>',\n sparkle: '<path d=\"M12 3v4M12 17v4M3 12h4M17 12h4M6 6l2.5 2.5M15.5 15.5 18 18M6 18l2.5-2.5M15.5 8.5 18 6\"/>',\n stop: '<rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" rx=\"1.5\"/>',\n bulb: '<path d=\"M9 18h6M10 21h4M12 3a6 6 0 0 0-3.5 10.9c.6.5 1 1.2 1 2.1h5c0-.9.4-1.6 1-2.1A6 6 0 0 0 12 3z\"/>',\n bug: '<rect x=\"8\" y=\"7\" width=\"8\" height=\"12\" rx=\"4\"/><path d=\"M12 7V5M9 5l1.5 2M15 5l-1.5 2M4 11h4M16 11h4M4 17l4-2M20 17l-4-2\"/>',\n rocket: '<path d=\"M5 15c-1.5 1.5-2 4-2 6 2 0 4.5-.5 6-2M9 15l-3-3c1.5-5 5.5-8 12-9-1 6.5-4 10.5-9 12z\"/><circle cx=\"14.5\" cy=\"9.5\" r=\"1.5\"/>',\n undo: '<path d=\"M9 14 4 9l5-5\"/><path d=\"M4 9h10a6 6 0 0 1 0 12h-3\"/>',\n reset: '<path d=\"M3 12a9 9 0 1 0 3-6.7L3 8M3 3v5h5\"/>',\n flag: '<path d=\"M5 21V4M5 4h11l-2 4 2 4H5\"/>',\n code: '<path d=\"m8 8-4 4 4 4M16 8l4 4-4 4M13 5l-2 14\"/>',\n flask: '<path d=\"M9 3h6M10 3v6L5 19a1.5 1.5 0 0 0 1.3 2h11.4a1.5 1.5 0 0 0 1.3-2l-5-10V3\"/>',\n target: '<circle cx=\"12\" cy=\"12\" r=\"8\"/><circle cx=\"12\" cy=\"12\" r=\"4\"/><circle cx=\"12\" cy=\"12\" r=\".6\"/>',\n merge: '<circle cx=\"6\" cy=\"5\" r=\"2\"/><circle cx=\"6\" cy=\"19\" r=\"2\"/><circle cx=\"18\" cy=\"19\" r=\"2\"/><path d=\"M6 7v10M6 7c0 6 12 4 12 10\"/>',\n server: '<rect x=\"4\" y=\"4\" width=\"16\" height=\"7\" rx=\"1.5\"/><rect x=\"4\" y=\"13\" width=\"16\" height=\"7\" rx=\"1.5\"/><path d=\"M8 7.5h.01M8 16.5h.01\"/>',\n copy: '<rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\"/><path d=\"M5 15V5a2 2 0 0 1 2-2h8\"/>',\n briefcase: '<rect x=\"3\" y=\"7\" width=\"18\" height=\"13\" rx=\"2\"/><path d=\"M9 7V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2M3 13h18\"/>',\n smile: '<circle cx=\"12\" cy=\"12\" r=\"8\"/><path d=\"M8.5 14a4 4 0 0 0 7 0M9.5 10h.01M14.5 10h.01\"/>',\n bolt: '<path d=\"M13 3 5 14h6l-1 7 8-11h-6z\"/>',\n link: '<path d=\"M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1\"/><path d=\"M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1\"/>',\n refresh: '<path d=\"M20 11a8 8 0 0 0-14.5-4.5L4 8M4 4v4h4M4 13a8 8 0 0 0 14.5 4.5L20 16M20 20v-4h-4\"/>',\n // drawings for the avatar of an agent and the icons that came with Nabu\n tBusiness: '<rect x=\"3\" y=\"7\" width=\"18\" height=\"13\" rx=\"2\"/><path d=\"M9 7V5h6v2M3 12h18\"/>',\n tFriendly: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M8 14c1 1.5 2.4 2.2 4 2.2s3-.7 4-2.2M9 9.5h.01M15 9.5h.01\"/>',\n tBrief: '<path d=\"M13 3L5 13h6l-1 8 8-10h-6z\"/>',\n tMentor: '<path d=\"M3 6c3-1 6-1 9 1 3-2 6-2 9-1v13c-3-1-6-1-9 1-3-2-6-2-9-1zM12 7v13\"/>',\n tg: '<path d=\"M3 11l18-7-3 16-6-5-3 3v-5l9-7-11 6z\"/>',\n msg2: '<path d=\"M4 5h16v11H8l-4 4z\"/>',\n plug: '<path d=\"M9 3v5M15 3v5M6 8h12v3a6 6 0 0 1-12 0zM12 17v4\"/>',\n repeat: '<path d=\"M17 2l3 3-3 3M4 11V9a4 4 0 0 1 4-4h12M7 22l-3-3 3-3M20 13v2a4 4 0 0 1-4 4H4\"/>',\n shield: '<path d=\"M12 3l8 3v6c0 5-4 8-8 9-4-1-8-4-8-9V6z\"/>',\n box: '<path d=\"M3 7l9-4 9 4v10l-9 4-9-4zM3 7l9 4 9-4M12 11v10\"/>',\n brain: '<path d=\"M9 4a3 3 0 0 0-3 3 3 3 0 0 0-2 5 3 3 0 0 0 2 5 3 3 0 0 0 6 1V5a3 3 0 0 0-3-1zM15 4a3 3 0 0 1 3 3 3 3 0 0 1 2 5 3 3 0 0 1-2 5 3 3 0 0 1-6 1\"/>',\n chart: '<path d=\"M4 20h16M6 16l4-5 3 3 5-7\"/>',\n play: '<path d=\"M7 5l12 7-12 7z\"/>',\n spark: '<path d=\"M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z\"/>',\n tag: '<path d=\"M3 12V4h8l9 9-8 8z\"/><circle cx=\"7.5\" cy=\"8.5\" r=\"1.3\"/>',\n globe: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18\"/>',\n download: '<path d=\"M12 4v12M7 11l5 5 5-5M5 20h14\"/>',\n pdf: '<path d=\"M6 3h9l4 4v14H6z\"/><path d=\"M15 3v4h4M9 12h6M9 15.5h6M9 19h3\"/>',\n markdown: '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M7 15V9l2.5 3L12 9v6M16 9v6M14 13l2 2 2-2\"/>',\n source: '<path d=\"M6 3h9l4 4v14H6z\"/><path d=\"M15 3v4h4M10.5 11l-2 2.5 2 2.5M13.5 11l2 2.5-2 2.5\"/>',\n pin: '<path d=\"M9 4h6l-1 6 4 4H6l4-4zM12 14v6\"/>',\n edit: '<path d=\"M4 20h4L19 9l-4-4L4 16zM14 6l4 4\"/>',\n image: '<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><circle cx=\"9\" cy=\"10\" r=\"2\"/><path d=\"m21 16-5-5-9 9\"/>',\n compress: '<path d=\"M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7\"/>',\n // a double chevron to the right: a panel folds to the right edge (FTR.HMR.SPEC-0001 R8)\n chevrons: '<path d=\"m6 6 6 6-6 6M13 6l6 6-6 6\"/>',\n} as const;\n\nexport type IconName = keyof typeof PATHS;\n\nexport function Icon({ name, size = 18, className = \"\" }: { name: IconName; size?: number; className?: string }) {\n return (\n <svg\n className={`i ${className}`}\n viewBox=\"0 0 24 24\"\n style={{ width: size, height: size }}\n aria-hidden=\"true\"\n dangerouslySetInnerHTML={{ __html: PATHS[name] }}\n />\n );\n}\n\nexport function GitHubIcon() {\n return (\n <svg className=\"i\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" style={{ fill: \"currentColor\", stroke: \"none\" }}>\n <path d=\"M12 2a10 10 0 0 0-3.2 19.5c.5.1.7-.2.7-.5v-1.7c-2.8.6-3.4-1.3-3.4-1.3-.5-1.2-1.1-1.5-1.1-1.5-.9-.6.1-.6.1-.6 1 .1 1.5 1 1.5 1 .9 1.5 2.4 1.1 2.9.8.1-.6.4-1.1.6-1.3-2.2-.3-4.6-1.1-4.6-5a3.9 3.9 0 0 1 1-2.7 3.6 3.6 0 0 1 .1-2.7s.8-.3 2.8 1a9.6 9.6 0 0 1 5 0c1.9-1.3 2.8-1 2.8-1 .5 1.4.2 2.4.1 2.7a3.9 3.9 0 0 1 1 2.7c0 3.9-2.4 4.7-4.6 5 .4.3.7.9.7 1.9V21c0 .3.2.6.7.5A10 10 0 0 0 12 2z\" />\n </svg>\n );\n}\n\n/** Names of all icons, for the showcase. */\nexport const ICON_NAMES = Object.keys(PATHS) as IconName[];\n","import type { ReactNode } from \"react\";\n\n// A small read-only Markdown renderer for answers of an agent and generated\n// documents: headings, paragraphs, lists, GFM tables, code fences,\n// bold, italic and inline code. It builds React elements (no raw HTML), so\n// content written by the agent cannot inject markup.\n\nfunction inline(text: string, key: string): ReactNode[] {\n const out: ReactNode[] = [];\n const re = /(`[^`]+`|\\*\\*[^*]+\\*\\*|\\*[^*]+\\*|_[^_]+_)/g;\n let last = 0;\n let m: RegExpExecArray | null;\n let i = 0;\n while ((m = re.exec(text))) {\n if (m.index > last) out.push(text.slice(last, m.index));\n const tok = m[0];\n const k = `${key}-${i++}`;\n if (tok.startsWith(\"`\")) out.push(<code key={k}>{tok.slice(1, -1)}</code>);\n else if (tok.startsWith(\"**\")) out.push(<b key={k}>{tok.slice(2, -2)}</b>);\n else out.push(<i key={k}>{tok.slice(1, -1)}</i>);\n last = m.index + tok.length;\n }\n if (last < text.length) out.push(text.slice(last));\n return out;\n}\n\nconst cells = (row: string) => row.trim().replace(/^\\||\\|$/g, \"\").split(\"|\").map((c) => c.trim());\n\nexport function Markdown({ text }: { text: string }) {\n const lines = text.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const blocks: ReactNode[] = [];\n let i = 0;\n let n = 0;\n while (i < lines.length) {\n const line = lines[i];\n const k = `b${n++}`;\n if (/^\\s*(```|~~~)/.test(line)) {\n const body: string[] = [];\n i++;\n while (i < lines.length && !/^\\s*(```|~~~)/.test(lines[i])) body.push(lines[i++]);\n i++;\n blocks.push(<pre key={k}><code>{body.join(\"\\n\")}</code></pre>);\n continue;\n }\n const h = /^(#{1,6})\\s+(.*)$/.exec(line);\n if (h) {\n const level = Math.min(6, h[1].length + 2);\n const Tag = `h${level}` as \"h3\";\n blocks.push(<Tag key={k}>{inline(h[2], k)}</Tag>);\n i++;\n continue;\n }\n if (line.trim().startsWith(\"|\") && i + 1 < lines.length && /^\\s*\\|?\\s*:?-{2,}/.test(lines[i + 1])) {\n const head = cells(line);\n i += 2;\n const rows: string[][] = [];\n while (i < lines.length && lines[i].trim().startsWith(\"|\")) rows.push(cells(lines[i++]));\n blocks.push(\n <table key={k} className=\"cov\">\n <thead><tr>{head.map((c, j) => <th key={j}>{inline(c, `${k}h${j}`)}</th>)}</tr></thead>\n <tbody>{rows.map((r, ri) => <tr key={ri}>{r.map((c, j) => <td key={j}>{inline(c, `${k}r${ri}c${j}`)}</td>)}</tr>)}</tbody>\n </table>,\n );\n continue;\n }\n if (/^\\s*([-*+]|\\d+[.)])\\s+/.test(line)) {\n const ordered = /^\\s*\\d/.test(line);\n const items: string[] = [];\n while (i < lines.length && /^\\s*([-*+]|\\d+[.)])\\s+/.test(lines[i])) items.push(lines[i++].replace(/^\\s*([-*+]|\\d+[.)])\\s+/, \"\"));\n const Tag = ordered ? \"ol\" : \"ul\";\n blocks.push(<Tag key={k}>{items.map((it, j) => <li key={j}>{inline(it, `${k}${j}`)}</li>)}</Tag>);\n continue;\n }\n if (!line.trim()) {\n i++;\n continue;\n }\n const para: string[] = [];\n while (i < lines.length && lines[i].trim() && !/^(#{1,6}\\s|\\s*(```|~~~|\\||[-*+]\\s|\\d+[.)]\\s))/.test(lines[i])) para.push(lines[i++]);\n if (para.length === 0) para.push(lines[i++]);\n blocks.push(<p key={k}>{inline(para.join(\" \"), k)}</p>);\n }\n return <div className=\"prose\">{blocks}</div>;\n}\n","import { createContext, useCallback, useContext, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useKitT } from \"../i18n\";\nimport { Icon, type IconName } from \"./Icon\";\n\n// ─── Modal ─────────────────────────────────────────────────────────\n\nexport function Modal({ title, onClose, children, footer, wide = false }: {\n title: ReactNode; onClose: () => void; children: ReactNode; footer?: ReactNode; wide?: boolean;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n document.addEventListener(\"keydown\", onKey);\n ref.current?.querySelector<HTMLElement>(\"input, textarea, select, button.primary\")?.focus();\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [onClose]);\n return (\n <div className=\"overlay\" onMouseDown={(e) => e.target === e.currentTarget && onClose()}>\n <div className={`modal${wide ? \" wide\" : \"\"}`} role=\"dialog\" aria-modal=\"true\" ref={ref}>\n <header>{title}</header>\n <div className=\"mb\">{children}</div>\n {footer && <footer>{footer}</footer>}\n </div>\n </div>\n );\n}\n\n// ─── Toasts ────────────────────────────────────────────────────────\n\nexport interface ToastSpec {\n kind?: \"error\" | \"ok\" | \"info\";\n title: string;\n text?: ReactNode;\n actions?: { label: string; primary?: boolean; onClick: () => void }[];\n sticky?: boolean;\n}\n\nconst ToastCtx = createContext<(t: ToastSpec) => void>(() => {});\n\nexport function ToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<(ToastSpec & { id: number })[]>([]);\n const next = useRef(1);\n const dismiss = useCallback((id: number) => setToasts((ts) => ts.filter((t) => t.id !== id)), []);\n const push = useCallback((t: ToastSpec) => {\n const id = next.current++;\n setToasts((ts) => [...ts.slice(-3), { ...t, id }]);\n if (!t.sticky && !t.actions) setTimeout(() => dismiss(id), 6000);\n }, [dismiss]);\n const close = useKitT()(\"close\");\n return (\n <ToastCtx.Provider value={push}>\n {children}\n <div className=\"toast-wrap\" aria-live=\"polite\">\n {toasts.map((t) => (\n <div key={t.id} className={`toast ${t.kind ?? \"info\"}`} role={t.kind === \"error\" ? \"alert\" : \"status\"}>\n <div className=\"row\" style={{ alignItems: \"flex-start\", flexWrap: \"nowrap\" }}>\n <div className=\"grow\">\n <b>{t.title}</b>\n {t.text && <span className=\"small t2\">{t.text}</span>}\n </div>\n <button className=\"iconbtn\" style={{ width: 24, height: 24 }} onClick={() => dismiss(t.id)} aria-label={close}>\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n {t.actions && (\n <div className=\"acts\">\n {t.actions.map((a) => (\n <button key={a.label} className={`btn sm${a.primary ? \" primary\" : \"\"}`} onClick={() => { dismiss(t.id); a.onClick(); }}>\n {a.label}\n </button>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n </ToastCtx.Provider>\n );\n}\n\nexport const useToast = () => useContext(ToastCtx);\n\n// ─── Small pieces ──────────────────────────────────────────────────\n\n/** Two letters of a name for an avatar without a picture. */\nexport function initials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[1][0]).toUpperCase();\n}\n\n/** The avatar of a user or of an agent. What an agent looks like is decided by the\n * product (R7): it gives the icon and the colour variant — a class beside `.avatar.agent`. */\nexport function Avatar({ name, url, small, agent, icon, variant }: {\n name: string; url?: string | null; small?: boolean; agent?: boolean; icon?: IconName; variant?: string;\n}) {\n const cls = `avatar${small ? \" s\" : \"\"}${agent ? \" agent\" : \"\"}${agent && variant ? ` ${variant}` : \"\"}`;\n return (\n <span className={cls} aria-hidden=\"true\">\n {url ? <img src={url} alt=\"\" />\n : agent && icon ? <Icon name={icon} size={small ? 14 : 18} />\n : agent ? name.slice(0, 1).toUpperCase() : initials(name)}\n </span>\n );\n}\n\nexport function Switch({ on, onChange, label, disabled }: { on: boolean; onChange: (v: boolean) => void; label?: ReactNode; disabled?: boolean }) {\n return (\n <button type=\"button\" className=\"switch\" role=\"switch\" aria-checked={on} disabled={disabled} onClick={() => onChange(!on)}>\n <span className={`sw${on ? \" on\" : \"\"}`} />\n {label}\n </button>\n );\n}\n\nexport function Empty({ icon, title, children }: { icon: IconName; title: ReactNode; children?: ReactNode }) {\n return (\n <div className=\"empty dashed\">\n <div className=\"ic\"><Icon name={icon} /></div>\n <b>{title}</b>\n {children}\n </div>\n );\n}\n\nexport function Loading() {\n const t = useKitT();\n return <div className=\"loading\">{t(\"loading\")}</div>;\n}\n\n/** Popover menu closed by an outside click. */\nexport function useOutside<T extends HTMLElement>(open: boolean, close: () => void) {\n const ref = useRef<T>(null);\n useEffect(() => {\n if (!open) return;\n const h = (e: MouseEvent) => ref.current && !ref.current.contains(e.target as Node) && close();\n const k = (e: KeyboardEvent) => e.key === \"Escape\" && close();\n document.addEventListener(\"mousedown\", h);\n document.addEventListener(\"keydown\", k);\n return () => {\n document.removeEventListener(\"mousedown\", h);\n document.removeEventListener(\"keydown\", k);\n };\n }, [open, close]);\n return ref;\n}\n"],"mappings":";;;;AAGA,IAAMC,IAAQ;CACZ,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACT,KAAK;CACL,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;CACN,GAAG;CACH,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,KAAK;CACL,KAAK;CACL,OAAO;CACP,MAAM;CACN,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,OAAO;CACP,KAAK;CACL,OAAO;CACP,SAAS;CACT,MAAM;CACN,MAAM;CACN,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,MAAM;CACN,WAAW;CACX,OAAO;CACP,MAAM;CACN,MAAM;CACN,SAAS;CAET,WAAW;CACX,WAAW;CACX,QAAQ;CACR,SAAS;CACT,IAAI;CACJ,MAAM;CACN,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,KAAK;CACL,OAAO;CACP,OAAO;CACP,MAAM;CACN,OAAO;CACP,KAAK;CACL,OAAO;CACP,UAAU;CACV,KAAK;CACL,UAAU;CACV,QAAQ;CACR,KAAK;CACL,MAAM;CACN,OAAO;CACP,UAAU;CAEV,UAAU;AACZ;AAIA,SAAgBC,EAAK,EAAE,SAAM,UAAO,IAAI,eAAY,MAA6D;CAC/G,OACE,kBAAC,OAAD;EACE,WAAW,KAAKC;EAChB,SAAQ;EACR,OAAO;GAAE,OAAOC;GAAM,QAAQA;EAAK;EACnC,eAAY;EACZ,yBAAyB,EAAE,QAAQH,EAAMI,GAAM;CAChD,CAAA;AAEL;AAEA,SAAgBC,IAAa;CAC3B,OACE,kBAAC,OAAD;EAAK,WAAU;EAAI,SAAQ;EAAY,eAAY;EAAO,OAAO;GAAE,MAAM;GAAgB,QAAQ;EAAO;EACtG,UAAA,kBAAC,QAAD,EAAM,GAAE,kYAAmY,CAAA;CACxY,CAAA;AAET;AAG0B,OAAO,KAAKL,CAAK;;;ACtG3C,SAASM,EAAO,GAAc,GAA0B;CACtD,IAAMC,IAAmB,CAAC,GACpBC,IAAK,8CACPC,IAAO,GACPC,GACAC,IAAI;CACR,OAAQ,IAAIH,EAAG,KAAKI,CAAI,IAAI;EAC1B,AAAIF,EAAE,QAAQD,KAAMF,EAAI,KAAKK,EAAK,MAAMH,GAAMC,EAAE,KAAK,CAAC;EACtD,IAAMG,IAAMH,EAAE,IACRI,IAAI,GAAGC,EAAI,GAAG;EAIpB,AAHIF,EAAI,WAAW,GAAG,IAAGN,EAAI,KAAK,kBAAC,QAAD,EAAA,UAAeM,EAAI,MAAM,GAAG,EAAE,EAAQ,GAA3BC,CAA2B,CAAC,IAChED,EAAI,WAAW,IAAI,IAAGN,EAAI,KAAK,kBAAC,KAAD,EAAA,UAAYM,EAAI,MAAM,GAAG,EAAE,EAAK,GAAxBC,CAAwB,CAAC,IACpEP,EAAI,KAAK,kBAAC,KAAD,EAAA,UAAYM,EAAI,MAAM,GAAG,EAAE,EAAK,GAAxBC,CAAwB,CAAC,GAC/C,IAAOJ,EAAE,QAAQG,EAAI;CACvB;CAEA,OADIJ,IAAOG,EAAK,UAAQL,EAAI,KAAKK,EAAK,MAAMH,CAAI,CAAC,GAC1CF;AACT;AAEA,IAAMS,KAAS,MAAgBC,EAAI,KAAK,CAAC,CAAC,QAAQ,YAAY,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAMC,EAAE,KAAK,CAAC;AAEhG,SAAgBC,EAAS,EAAE,WAA0B;CACnD,IAAMC,IAAQR,EAAK,QAAQ,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,GAC9CS,IAAsB,CAAC,GACzBV,IAAI,GACJW,IAAI;CACR,OAAOX,IAAIS,EAAM,SAAQ;EACvB,IAAMG,IAAOH,EAAMT,IACbG,IAAI,IAAI;EACd,IAAI,gBAAgB,KAAKS,CAAI,GAAG;GAC9B,IAAMC,IAAiB,CAAC;GAExB,KADA,KACOb,IAAIS,EAAM,UAAU,CAAC,gBAAgB,KAAKA,EAAMT,EAAE,IAAG,EAAK,KAAKS,EAAM,IAAI;GAEhF,AADA,KACAC,EAAO,KAAK,kBAAC,OAAD,EAAA,UAAa,kBAAC,QAAD,EAAA,UAAOG,EAAK,KAAK,IAAI,EAAQ,CAAA,EAAM,GAAtCV,CAAsC,CAAC;GAC7D;EACF;EACA,IAAMW,IAAI,oBAAoB,KAAKF,CAAI;EACvC,IAAIE,GAAG;GAEL,IAAMC,IAAM,IADE,KAAK,IAAI,GAAGD,EAAE,EAAE,CAAC,SAAS,CACxB;GAEhB,AADAJ,EAAO,KAAK,kBAACK,GAAD,EAAA,UAAcpB,EAAOmB,EAAE,IAAIX,CAAC,EAAO,GAAzBA,CAAyB,CAAC,GAChD;GACA;EACF;EACA,IAAIS,EAAK,KAAK,CAAC,CAAC,WAAW,GAAG,KAAKZ,IAAI,IAAIS,EAAM,UAAU,oBAAoB,KAAKA,EAAMT,IAAI,EAAE,GAAG;GACjG,IAAMgB,IAAOX,EAAMO,CAAI;GACvB,KAAK;GACL,IAAMK,IAAmB,CAAC;GAC1B,OAAOjB,IAAIS,EAAM,UAAUA,EAAMT,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,IAAG,EAAK,KAAKK,EAAMI,EAAM,IAAI,CAAC;GACvF,EAAO,KACL,kBAAC,SAAD;IAAe,WAAU;IAAzB,UAAA,CACE,kBAAC,SAAD,EAAA,UAAO,kBAAC,MAAD,EAAA,UAAKO,EAAK,KAAK,GAAG,MAAM,kBAAC,MAAD,EAAA,UAAarB,EAAOY,GAAG,GAAGJ,EAAE,GAAGe,GAAG,EAAM,GAA/BA,CAA+B,CAAC,EAAM,CAAA,EAAQ,CAAA,GACtF,kBAAC,SAAD,EAAA,UAAQD,EAAK,KAAK,GAAG,MAAO,kBAAC,MAAD,EAAA,UAAcE,EAAE,KAAK,GAAG,MAAM,kBAAC,MAAD,EAAA,UAAaxB,EAAOY,GAAG,GAAGJ,EAAE,GAAGiB,EAAG,GAAGF,GAAG,EAAM,GAArCA,CAAqC,CAAC,EAAM,GAA1EE,CAA0E,CAAC,EAAS,CAAA,CACpH;GAHK,GAAAjB,CAGL,CACT;GACA;EACF;EACA,IAAI,yBAAyB,KAAKS,CAAI,GAAG;GACvC,IAAMS,IAAU,SAAS,KAAKT,CAAI,GAC5BU,IAAkB,CAAC;GACzB,OAAOtB,IAAIS,EAAM,UAAU,yBAAyB,KAAKA,EAAMT,EAAE,IAAG,EAAM,KAAKS,EAAM,IAAI,CAAC,QAAQ,0BAA0B,EAAE,CAAC;GAC/H,IAAMM,IAAMM,IAAU,OAAO;GAC7B,EAAO,KAAK,kBAACN,GAAD,EAAA,UAAcO,EAAM,KAAK,GAAI,MAAM,kBAAC,MAAD,EAAA,UAAa3B,EAAO4B,GAAI,GAAGpB,IAAIe,GAAG,EAAM,GAA/BA,CAA+B,CAAC,EAAO,GAAzEf,CAAyE,CAAC;GAChG;EACF;EACA,IAAI,CAACS,EAAK,KAAK,GAAG;GAChB;GACA;EACF;EACA,IAAMY,IAAiB,CAAC;EACxB,OAAOxB,IAAIS,EAAM,UAAUA,EAAMT,EAAE,CAAC,KAAK,KAAK,CAAC,gDAAgD,KAAKS,EAAMT,EAAE,IAAG,EAAK,KAAKS,EAAM,IAAI;EAEnI,AADIe,EAAK,WAAW,KAAGA,EAAK,KAAKf,EAAM,IAAI,GAC3CC,EAAO,KAAK,kBAAC,KAAD,EAAA,UAAYf,EAAO6B,EAAK,KAAK,GAAG,GAAGrB,CAAC,EAAK,GAAjCA,CAAiC,CAAC;CACxD;CACA,OAAO,kBAAC,OAAD;EAAK,WAAU;EAAS,UAAAO;CAAY,CAAA;AAC7C;;;AC7EA,SAAgBe,EAAM,EAAE,UAAO,YAAS,aAAU,WAAQ,UAAO,MAE9D;CACD,IAAMC,IAAMC,EAAuB,IAAI;CAOvC,OANAC,QAAgB;EACd,IAAMC,KAAS,MAAqB,EAAE,QAAQ,YAAYC,EAAQ;EAGlE,OAFA,SAAS,iBAAiB,WAAWD,CAAK,GAC1CH,EAAI,SAAS,cAA2B,yCAAyC,CAAC,EAAE,MAAM,SAC7E,SAAS,oBAAoB,WAAWG,CAAK;CAC5D,GAAG,CAACC,CAAO,CAAC,GAEV,kBAAC,OAAD;EAAK,WAAU;EAAU,cAAc,MAAM,EAAE,WAAW,EAAE,iBAAiBA,EAAQ;EACnF,UAAA,kBAAC,OAAD;GAAK,WAAW,QAAQC,IAAO,UAAU;GAAM,MAAK;GAAS,cAAW;GAAY;GAApF,UAAA;IACE,kBAAC,UAAD,EAAA,UAASC,EAAc,CAAA;IACvB,kBAAC,OAAD;KAAK,WAAU;KAAM;IAAc,CAAA;IAClCC,KAAU,kBAAC,UAAD,EAAA,UAASA,EAAe,CAAA;GAChC;;CACF,CAAA;AAET;AAYA,IAAMC,IAAWC,QAA4C,CAAC,CAAC;AAE/D,SAAgBC,EAAc,EAAE,eAAqC;CACnE,IAAM,CAACC,GAAQC,KAAaC,EAAyC,CAAC,CAAC,GACjEC,IAAOb,EAAO,CAAC,GACfc,IAAUC,GAAa,MAAeJ,GAAW,MAAOK,EAAG,QAAQ,MAAM,EAAE,OAAOC,CAAE,CAAC,GAAG,CAAC,CAAC,GAC1FC,IAAOH,GAAa,MAAiB;EACzC,IAAME,IAAK,EAAK;EAEhB,AADAN,GAAW,MAAO,CAAC,GAAGK,EAAG,MAAM,EAAE,GAAG;GAAE,GAAGG;GAAG;EAAG,CAAC,CAAC,GAC7C,CAACA,EAAE,UAAU,CAACA,EAAE,WAAS,iBAAiBL,EAAQG,CAAE,GAAG,GAAI;CACjE,GAAG,CAACH,CAAO,CAAC,GACNM,IAAQ3D,EAAQ,CAAC,CAAC,OAAO;CAC/B,OACE,kBAAC8C,EAAS,UAAV;EAAmB,OAAOW;EAA1B,UAAA,CACGG,GACD,kBAAC,OAAD;GAAK,WAAU;GAAa,aAAU;GACnC,UAAAX,EAAO,KAAK,MACX,kBAAC,OAAD;IAAgB,WAAW,SAASS,EAAE,QAAQ;IAAU,MAAMA,EAAE,SAAS,UAAU,UAAU;IAA7F,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;KAAM,OAAO;MAAE,YAAY;MAAc,UAAU;KAAS;KAA3E,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC,KAAD,EAAA,UAAIA,EAAE,MAAS,CAAA,GACdA,EAAE,QAAQ,kBAAC,QAAD;OAAM,WAAU;OAAY,UAAAA,EAAE;MAAW,CAAA,CACjD;KACL,CAAA,GAAA,kBAAC,UAAD;MAAQ,WAAU;MAAU,OAAO;OAAE,OAAO;OAAI,QAAQ;MAAG;MAAG,eAAeL,EAAQK,EAAE,EAAE;MAAG,cAAYC;MACtG,UAAA,kBAACzD,GAAD;OAAM,MAAK;OAAI,MAAM;MAAK,CAAA;KACpB,CAAA,CACL;IACJ,CAAA,GAAAwD,EAAE,WACD,kBAAC,OAAD;KAAK,WAAU;KACZ,UAAAA,EAAE,QAAQ,KAAK,MACd,kBAAC,UAAD;MAAsB,WAAW,SAASG,EAAE,UAAU,aAAa;MAAM,eAAe;OAAiB,AAAfR,EAAQK,EAAE,EAAE,GAAGG,EAAE,QAAQ;MAAG;MACnH,UAAAA,EAAE;KACG,GAFKA,EAAE,KAEP,CACT;IACE,CAAA,CAEJ;GAnBK,GAAAH,EAAE,EAmBP,CACN;EACE,CAAA,CACY;;AAEvB;AAEA,IAAaI,UAAiBC,EAAWjB,CAAQ;AAKjD,SAAgBkB,EAAS,GAAsB;CAC7C,IAAMC,IAAQ5D,EAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;CAGrD,OAFI4D,EAAM,WAAW,IAAU,MAC3BA,EAAM,WAAW,IAAUA,EAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,KACxDA,EAAM,EAAE,CAAC,KAAKA,EAAM,EAAE,CAAC,GAAA,CAAI,YAAY;AACjD;AAIA,SAAgBC,EAAO,EAAE,SAAM,QAAK,UAAO,UAAO,SAAM,cAErD;CACD,IAAMC,IAAM,SAASC,IAAQ,OAAO,KAAKC,IAAQ,WAAW,KAAKA,KAASC,IAAU,IAAIA,MAAY;CACpG,OACE,kBAAC,QAAD;EAAM,WAAWH;EAAK,eAAY;EAC/B,UAAAI,IAAM,kBAAC,OAAD;GAAK,KAAKA;GAAK,KAAI;EAAI,CAAA,IAC1BF,KAASG,IAAO,kBAACtE,GAAD;GAAM,MAAMsE;GAAM,MAAMJ,IAAQ,KAAK;EAAK,CAAA,IAC1DC,IAAQhE,EAAK,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI2D,EAAS3D,CAAI;CACtD,CAAA;AAEV;AAEA,SAAgBoE,EAAO,EAAE,OAAI,aAAU,UAAO,eAAoG;CAChJ,OACE,kBAAC,UAAD;EAAQ,MAAK;EAAS,WAAU;EAAS,MAAK;EAAS,gBAAcC;EAAc;EAAU,eAAeC,EAAS,CAACD,CAAE;EAAxH,UAAA,CACE,kBAAC,QAAD,EAAM,WAAW,KAAKA,IAAK,QAAQ,KAAO,CAAA,GACzCE,CACK;;AAEZ;AAEA,SAAgBC,EAAM,EAAE,SAAM,UAAO,eAAwE;CAC3G,OACE,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,kBAAC,OAAD;IAAK,WAAU;IAAK,UAAA,kBAAC3E,GAAD,EAAM,MAAMsE,EAAO,CAAA;GAAM,CAAA;GAC7C,kBAAC,KAAD,EAAA,UAAI5B,EAAS,CAAA;GACZgB;EACE;;AAET;AAEA,SAAgBkB,IAAU;CACxB,IAAMpB,IAAI1D,EAAQ;CAClB,OAAO,kBAAC,OAAD;EAAK,WAAU;EAAW,UAAA0D,EAAE,SAAS;CAAO,CAAA;AACrD;AAGA,SAAgBqB,EAAkC,GAAe,GAAmB;CAClF,IAAMzC,IAAMC,EAAU,IAAI;CAY1B,OAXAC,QAAgB;EACd,IAAI,CAACwC,GAAM;EACX,IAAMtD,KAAK,MAAkBY,EAAI,WAAW,CAACA,EAAI,QAAQ,SAAS,EAAE,MAAc,KAAKqB,EAAM,GACvF5C,KAAK,MAAqB,EAAE,QAAQ,YAAY4C,EAAM;EAG5D,OAFA,SAAS,iBAAiB,aAAajC,CAAC,GACxC,SAAS,iBAAiB,WAAWX,CAAC,SACzB;GAEX,AADA,SAAS,oBAAoB,aAAaW,CAAC,GAC3C,SAAS,oBAAoB,WAAWX,CAAC;EAC3C;CACF,GAAG,CAACiE,GAAMrB,CAAK,CAAC,GACTrB;AACT"}