libre-webui 0.14.3 → 0.15.1

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.
Files changed (156) hide show
  1. package/README.md +117 -33
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +84 -0
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +99 -35
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/middleware/auth.d.ts.map +1 -1
  9. package/backend/dist/middleware/auth.js +27 -2
  10. package/backend/dist/middleware/auth.js.map +1 -1
  11. package/backend/dist/routes/plugins.d.ts.map +1 -1
  12. package/backend/dist/routes/plugins.js +1 -1
  13. package/backend/dist/routes/plugins.js.map +1 -1
  14. package/backend/dist/routes/users.d.ts.map +1 -1
  15. package/backend/dist/routes/users.js +40 -6
  16. package/backend/dist/routes/users.js.map +1 -1
  17. package/backend/dist/routes/work.d.ts +3 -0
  18. package/backend/dist/routes/work.d.ts.map +1 -0
  19. package/backend/dist/routes/work.js +604 -0
  20. package/backend/dist/routes/work.js.map +1 -0
  21. package/backend/dist/services/ollamaService.d.ts +7 -2
  22. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  23. package/backend/dist/services/ollamaService.js +8 -8
  24. package/backend/dist/services/ollamaService.js.map +1 -1
  25. package/backend/dist/services/pluginService.d.ts.map +1 -1
  26. package/backend/dist/services/pluginService.js +15 -15
  27. package/backend/dist/services/pluginService.js.map +1 -1
  28. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  29. package/backend/dist/services/preferencesService.js +1 -0
  30. package/backend/dist/services/preferencesService.js.map +1 -1
  31. package/backend/dist/services/workAgentGuidance.d.ts +24 -0
  32. package/backend/dist/services/workAgentGuidance.d.ts.map +1 -0
  33. package/backend/dist/services/workAgentGuidance.js +131 -0
  34. package/backend/dist/services/workAgentGuidance.js.map +1 -0
  35. package/backend/dist/services/workAgentService.d.ts +33 -0
  36. package/backend/dist/services/workAgentService.d.ts.map +1 -0
  37. package/backend/dist/services/workAgentService.js +935 -0
  38. package/backend/dist/services/workAgentService.js.map +1 -0
  39. package/backend/dist/services/workEventService.d.ts +40 -0
  40. package/backend/dist/services/workEventService.d.ts.map +1 -0
  41. package/backend/dist/services/workEventService.js +324 -0
  42. package/backend/dist/services/workEventService.js.map +1 -0
  43. package/backend/dist/services/workModelProviderService.d.ts +51 -0
  44. package/backend/dist/services/workModelProviderService.d.ts.map +1 -0
  45. package/backend/dist/services/workModelProviderService.js +952 -0
  46. package/backend/dist/services/workModelProviderService.js.map +1 -0
  47. package/backend/dist/services/workRuntimeService.d.ts +143 -0
  48. package/backend/dist/services/workRuntimeService.d.ts.map +1 -0
  49. package/backend/dist/services/workRuntimeService.js +1860 -0
  50. package/backend/dist/services/workRuntimeService.js.map +1 -0
  51. package/backend/dist/services/workTaskService.d.ts +96 -0
  52. package/backend/dist/services/workTaskService.d.ts.map +1 -0
  53. package/backend/dist/services/workTaskService.js +718 -0
  54. package/backend/dist/services/workTaskService.js.map +1 -0
  55. package/backend/dist/types/index.d.ts +3 -0
  56. package/backend/dist/types/index.d.ts.map +1 -1
  57. package/backend/dist/types/index.js.map +1 -1
  58. package/backend/dist/types/work.d.ts +209 -0
  59. package/backend/dist/types/work.d.ts.map +1 -0
  60. package/backend/dist/types/work.js +18 -0
  61. package/backend/dist/types/work.js.map +1 -0
  62. package/backend/dist/utils/ollamaLibrary.d.ts.map +1 -1
  63. package/backend/dist/utils/ollamaLibrary.js +81 -8
  64. package/backend/dist/utils/ollamaLibrary.js.map +1 -1
  65. package/backend/dist/utils/pluginChatAdapter.d.ts +9 -0
  66. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  67. package/backend/dist/utils/pluginChatAdapter.js +32 -6
  68. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  69. package/backend/dist/utils/pluginStreamAdapter.d.ts +12 -0
  70. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
  71. package/backend/dist/utils/pluginStreamAdapter.js +168 -19
  72. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
  73. package/backend/dist/utils/pluginStreaming.d.ts +10 -0
  74. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
  75. package/backend/dist/utils/pluginStreaming.js.map +1 -1
  76. package/backend/dist/utils/pluginValidation.d.ts +1 -0
  77. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  78. package/backend/dist/utils/pluginValidation.js +3 -0
  79. package/backend/dist/utils/pluginValidation.js.map +1 -1
  80. package/backend/package.json +1 -1
  81. package/electron/main.js +39 -16
  82. package/frontend/dist/assets/index-DkShhNBf.js +5 -0
  83. package/frontend/dist/assets/index-bdSWBsAM.css +1 -0
  84. package/frontend/dist/index.html +5 -4
  85. package/frontend/dist/js/{ArtifactContainer-CuvIIoHC.js → ArtifactContainer-BHSBrlQB.js} +1 -1
  86. package/frontend/dist/js/{ArtifactDemoPage-DI0QzAee.js → ArtifactDemoPage-BHGJmJAT.js} +1 -1
  87. package/frontend/dist/js/ArtifactSlideOutPanel-s8vcE5Ea.js +1 -0
  88. package/frontend/dist/js/ChatPage-B6Hm_pdu.js +16 -0
  89. package/frontend/dist/js/FirstTimeSetup-BYWAVAdE.js +1 -0
  90. package/frontend/dist/js/GalleryPage-CH4f65q8.js +1 -0
  91. package/frontend/dist/js/LibreClawPage-CcH7M3mJ.js +1 -0
  92. package/frontend/dist/js/{ModelManagerModals-DfgizeSq.js → ModelManagerModals-DltRprHU.js} +1 -1
  93. package/frontend/dist/js/ModelSelector-T1KZtIde.js +1 -0
  94. package/frontend/dist/js/ModelsPage-C1bM_Yoc.js +2 -0
  95. package/frontend/dist/js/PersonasPage-T_PrhnPG.js +13 -0
  96. package/frontend/dist/js/RichMessageContent-BdU5vXz9.js +3 -0
  97. package/frontend/dist/js/SettingsModal-BVj-D1L4.js +1 -0
  98. package/frontend/dist/js/UserManagementPage-Pix71oRW.js +1 -0
  99. package/frontend/dist/js/WorkPage-DdOVGyj_.js +2 -0
  100. package/frontend/dist/js/api-Do6u0tMM.js +19 -0
  101. package/frontend/dist/js/{ar-UnnZB1Qy.js → ar-KceI0PfT.js} +2 -2
  102. package/frontend/dist/js/babel-BnLuavNv.js +16 -0
  103. package/frontend/dist/js/{bn-uZXaDyeV.js → bn-DsKo2dzS.js} +2 -2
  104. package/frontend/dist/js/{cs-CCXlnUEB.js → cs-6UKhKj0A.js} +2 -2
  105. package/frontend/dist/js/{da--BpVVGPp.js → da-CJgZ3YuL.js} +2 -2
  106. package/frontend/dist/js/{de-DZd9lsBc.js → de-BZAmOuCT.js} +2 -2
  107. package/frontend/dist/js/{es-Bm968oUX.js → es-CD4u7no9.js} +2 -2
  108. package/frontend/dist/js/estree-Bu_-Wi6O.js +44 -0
  109. package/frontend/dist/js/fr-Cou2jOS3.js +2 -0
  110. package/frontend/dist/js/{hi-C6kwkL7d.js → hi-ZxkbNCyB.js} +2 -2
  111. package/frontend/dist/js/html-Ca764Rus.js +25 -0
  112. package/frontend/dist/js/{id-CDfqnnXS.js → id-DT9CqaWQ.js} +2 -2
  113. package/frontend/dist/js/{is-Dnd_7Jqv.js → is-BWSbAIoq.js} +2 -2
  114. package/frontend/dist/js/{it-BM0j6_Sz.js → it-CdNoTXm3.js} +2 -2
  115. package/frontend/dist/js/{ja-xGblKDDf.js → ja-CIuQg0xv.js} +2 -2
  116. package/frontend/dist/js/{ko-CQ2d_Oj0.js → ko-BWRUjDOH.js} +2 -2
  117. package/frontend/dist/js/markdown-DaiQGPEs.js +70 -0
  118. package/frontend/dist/js/{ms-CFpRuv_a.js → ms-gJstIj2a.js} +2 -2
  119. package/frontend/dist/js/{nl-D6oTztmP.js → nl-CydjVNUw.js} +2 -2
  120. package/frontend/dist/js/{pl-ByuvABul.js → pl-DPN9mAa5.js} +2 -2
  121. package/frontend/dist/js/postcss-DSDkwgFE.js +62 -0
  122. package/frontend/dist/js/{pt-CNFV21T7.js → pt-MRXGqIjQ.js} +2 -2
  123. package/frontend/dist/js/router-vendor-BjDI9mRe.js +1 -0
  124. package/frontend/dist/js/{ru-CRsSOntz.js → ru-CvQ9GkJF.js} +2 -2
  125. package/frontend/dist/js/standalone-DWWnsbIr.js +29 -0
  126. package/frontend/dist/js/{sv-BRkwjyS5.js → sv-BxS2fvhU.js} +2 -2
  127. package/frontend/dist/js/{th-DigqsQEB.js → th-DMxyn6e4.js} +2 -2
  128. package/frontend/dist/js/{tr-B5aMUMJE.js → tr-BTPldUaA.js} +2 -2
  129. package/frontend/dist/js/typescript-CatjJeHm.js +22 -0
  130. package/frontend/dist/js/ui-vendor-CAFEDSaO.js +177 -0
  131. package/frontend/dist/js/{uk-BUYi3llT.js → uk-BGxZOKgp.js} +2 -2
  132. package/frontend/dist/js/useBaseQuery-CVNuhuID.js +1 -0
  133. package/frontend/dist/js/useQuery-CYhC_da4.js +1 -0
  134. package/frontend/dist/js/{vi-hQIcXi3m.js → vi-82JkwFsQ.js} +2 -2
  135. package/frontend/dist/js/yaml-mLy9chOK.js +154 -0
  136. package/frontend/dist/js/{zh-CUDZ3JDv.js → zh-Bxxfwci3.js} +2 -2
  137. package/package.json +4 -2
  138. package/plugins/kimi-code.json +6 -37
  139. package/plugins/mlx-lm.json +55 -0
  140. package/frontend/dist/assets/index-BKzwVaAM.js +0 -16
  141. package/frontend/dist/assets/index-BPvF-fpc.css +0 -1
  142. package/frontend/dist/js/ArtifactSlideOutPanel-BzBemzHy.js +0 -1
  143. package/frontend/dist/js/ChatPage-DqpXctC2.js +0 -16
  144. package/frontend/dist/js/FirstTimeSetup-DRWeCsVI.js +0 -1
  145. package/frontend/dist/js/GalleryPage-CgD8fVx0.js +0 -1
  146. package/frontend/dist/js/LibreClawPage-B_Yon2fQ.js +0 -1
  147. package/frontend/dist/js/ModelsPage-CAKQ7J-b.js +0 -2
  148. package/frontend/dist/js/PersonasPage-Dj6Bka4I.js +0 -13
  149. package/frontend/dist/js/RichMessageContent-DP7XoxIa.js +0 -3
  150. package/frontend/dist/js/SettingsModal-BFyYhZYE.js +0 -1
  151. package/frontend/dist/js/UserManagementPage-CGMnhZr1.js +0 -1
  152. package/frontend/dist/js/fr-RlC0rD8I.js +0 -2
  153. package/frontend/dist/js/router-vendor-Bbvzv1ZC.js +0 -1
  154. package/frontend/dist/js/ui-vendor-CurEAeCe.js +0 -177
  155. package/frontend/dist/js/useBaseQuery-B1on3xcz.js +0 -1
  156. package/frontend/dist/js/useQuery-CXvo2RBT.js +0 -1
@@ -1,2 +1,2 @@
1
- var e={common:{loading:`Загрузка...`,save:`Сохранить`,saving:`Сохранение...`,cancel:`Отмена`,delete:`Удалить`,edit:`Редактировать`,close:`Закрыть`,back:`Назад`,next:`Далее`,confirm:`Подтвердить`,error:`Ошибка`,success:`Успешно`,warning:`Предупреждение`,or:`или`,optional:`необязательно`,enabled:`Включено`,disabled:`Отключено`,on:`Вкл`,off:`Выкл`,yes:`Да`,no:`Нет`,search:`Поиск`,noResults:`Ничего не найдено`,retry:`Повторить`,refresh:`Обновить`,download:`Скачать`,upload:`Загрузить`,export:`Экспорт`,import:`Импорт`,reset:`Сбросить`,apply:`Применить`,clear:`Очистить`,all:`Все`,none:`Нет`,default:`По умолчанию`,custom:`Пользовательский`,remove:`Удалить`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`С возвращением`,subtitle:`Войдите в свой аккаунт, чтобы продолжить`,username:`Имя пользователя`,usernamePlaceholder:`Введите имя пользователя`,password:`Пароль`,passwordPlaceholder:`Введите пароль`,signIn:`Войти`,signingIn:`Вход...`,noAccount:`Нет аккаунта?`,signUpHere:`Зарегистрируйтесь здесь`,loginSuccess:`Вход выполнен успешно!`,loginFailed:`Ошибка входа`,checkCredentials:`Ошибка входа. Проверьте учётные данные.`,enterBoth:`Пожалуйста, введите имя пользователя и пароль`,githubSuccess:`Вход через GitHub выполнен успешно!`,githubFailed:`Ошибка аутентификации GitHub`,githubVerifyFailed:`Не удалось проверить аутентификацию GitHub`},signup:{title:`Создать аккаунт`,subtitle:`Зарегистрируйте новый аккаунт`,username:`Имя пользователя`,usernamePlaceholder:`Выберите имя пользователя`,email:`Эл. почта`,emailPlaceholder:`ваш@email.com`,password:`Пароль`,passwordPlaceholder:`Выберите пароль`,confirmPassword:`Подтвердите пароль`,confirmPasswordPlaceholder:`Подтвердите ваш пароль`,createAccount:`Создать аккаунт`,creatingAccount:`Создание аккаунта...`,hasAccount:`Уже есть аккаунт?`,signInHere:`Войдите здесь`,signupSuccess:`Аккаунт успешно создан!`,signupFailed:`Ошибка регистрации`,tryAgain:`Ошибка регистрации. Попробуйте снова.`,usernameRequired:`Имя пользователя и пароль обязательны`,passwordMismatch:`Пароли не совпадают`,passwordTooShort:`Пароль должен содержать не менее 6 символов`},logout:{button:`Выйти`,success:`Выход выполнен успешно`},oauth:{continueWith:`Продолжить через {{provider}}`,connectingTo:`Подключение к {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Проверка аутентификации...`,welcome:`Добро пожаловать`,noEmail:`Email не указан`,role:`Роль`,id:`ID`,userId:`ID пользователя`,signInDescription:`Войдите с помощью учётной записи GitHub, чтобы продолжить`,signInWithGitHub:`Войти через GitHub`,jwtActive:`JWT-аутентификация активна`,jwtDescription:`JWT-аутентификация с GitHub OAuth`,github:`GitHub`,provider:`Провайдер`},setup:{welcome:{title:`Добро пожаловать в Libre WebUI`,subtitle:`Давайте начнём`,description:`Настройте ваш экземпляр Libre WebUI за несколько шагов`,createAdmin:`Создать аккаунт администратора`,features:{secure:{title:`Безопасность и конфиденциальность`,description:`Ваши разговоры остаются на вашем устройстве`},fast:{title:`Быстрый и отзывчивый`,description:`Оптимизирован для скорости и производительности`},openSource:{title:`Открытый исходный код`,description:`Бесплатное программное обеспечение с открытым исходным кодом`}}},admin:{title:`Создать аккаунт администратора`,subtitle:`Настройка администратора`,description:`Создайте первый аккаунт администратора для вашего экземпляра Libre WebUI`,usernamePlaceholder:`Введите имя администратора`,passwordPlaceholder:`Введите пароль (мин. 6 символов)`,confirmPlaceholder:`Подтвердите пароль`,creating:`Создание...`,createAdmin:`Создать администратора`,success:`Аккаунт администратора успешно создан!`,failed:`Не удалось создать аккаунт администратора`,fillAllFields:`Пожалуйста, заполните все поля`,note:`Это будет основной аккаунт администратора для вашего экземпляра Libre WebUI`},encryptionKey:{title:`Сохраните ваш ключ шифрования`,subtitle:`Важно: Сохраните этот ключ`,description:`Этот ключ шифрования защищает ваши конфиденциальные данные. Храните его надёжно — он понадобится при восстановлении базы данных.`,warning:`Предупреждение`,warningText:`Если вы потеряете этот ключ и вам потребуется восстановить базу данных, ваши зашифрованные данные (API-ключи, настройки) будут утеряны безвозвратно.`,label:`Ваш ключ шифрования`,loading:`Загрузка...`,copyToClipboard:`Копировать в буфер обмена`,copied:`Ключ шифрования скопирован в буфер обмена!`,copyFailed:`Не удалось скопировать ключ в буфер обмена`,envNote:`Этот ключ также сохранён в файле backend/.env как ENCRYPTION_KEY`,acknowledgment:`Я сохранил ключ шифрования в надёжном месте и понимаю, что его потеря может привести к утрате данных.`,confirmRequired:`Пожалуйста, подтвердите, что вы сохранили ключ шифрования`,continue:`Продолжить к Libre WebUI`}},chat:{greeting:{morning:`Доброе утро`,afternoon:`Добрый день`,evening:`Добрый вечер`,night:`Доброй ночи`},welcome:{helpToday:`Чем могу помочь сегодня?`,helpTonight:`Чем могу помочь сегодня вечером?`,variety:{create:{title:`Что будем создавать?`,subtitle:`Начните с мысли, наброска или задачи, которая никак не поддаётся.`},explore:{title:`С чего начнём?`,subtitle:`Расскажите о вопросе, к которому постоянно возвращаетесь.`},imagine:{title:`Что вы представляете?`,subtitle:`Мы можем вместе придать этому форму.`},focus:{title:`Что заслуживает вашего внимания?`,subtitle:`Давайте проясним следующий шаг.`},untangle:{title:`Что нужно распутать?`,subtitle:`Для начала покажите всё как есть, даже если пока хаотично.`},momentum:{title:`Начнём, когда будете готовы.`,subtitle:`Вернитесь к идее, плану или незаконченной теме.`},open:{title:`О чём вы думаете?`,subtitle:`Небольшая мысль или амбициозный проект. Подойдёт и то и другое.`},challenge:{title:`Что мы решаем?`,subtitle:`Расскажите, что пока не работает.`},draft:{title:`Давайте с чего-нибудь начнём.`,subtitle:`Необязательно сразу доводить до блеска.`},possibility:{title:`Во что это может превратиться?`,subtitle:`Покажите мне исходный материал.`},unexpected:{title:`Создадим что-нибудь неожиданное.`,subtitle:`Дайте мне ограничение, настроение или не до конца оформленную идею.`}}},input:{placeholder:`Отправить сообщение`,messagePlaceholder:`Сообщение...`,attachImages:`Прикрепить изображения`,attachments:`Вложения и дополнительные функции`,sendMessage:`Отправить сообщение`,stopGeneration:`Остановить генерацию`},session:{new:`Новый чат`,private:`Приватный`,privateMode:`Приватный режим`,privateDescription:`Этот разговор не будет сохранён`,privateTooltip:`Начать приватный разговор, который не будет сохранён`,deleteConfirm:`Вы уверены, что хотите удалить этот чат?`,generatingTitle:`Генерация заголовка`,noChats:`Чатов пока нет`,createFirst:`Создайте свой первый чат выше`,chats:`Чаты`,renameChat:`Переименовать чат`,deleteChat:`Удалить чат`},persona:{applied:`Персона применена`,label:`Персона`},model:{updated:`Модель обновлена`,noModels:`Модели недоступны`,noModelsDescription:`Модели недоступны. Убедитесь, что Ollama запущен и модели установлены.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`Модели недоступны. Убедитесь, что Ollama запущен и модели установлены.`},footer:{disclaimer:`ИИ может ошибаться — проверяйте важную информацию`,images:`{{count}} изображение`,images_plural:`{{count}} изображений`,structuredOutput:`Структурированный вывод`},mediaUpload:{dropImagesHere:`Перетащите изображения сюда или`,supportedFormats:`Поддерживаются: JPG, PNG, GIF, WebP (макс. 10 МБ каждый)`,browse:`выберите`},structuredOutput:{title:`Формат ответа`,none:`Нет (естественный язык)`,noneDescription:`Стандартный ответ на естественном языке`,json:`JSON`,jsonDescription:`Структурированный формат JSON`,list:`Список`,listDescription:`Массив элементов`,summary:`Резюме`,summaryDescription:`Краткое изложение документа с ключевыми моментами`,analysis:`Анализ`,analysisDescription:`Структурированный анализ с плюсами/минусами`,custom:`Пользовательская схема`,customDescription:`Определите собственную JSON-схему`,customSchema:`Пользовательская JSON-схема`,schemaPreview:`Предпросмотр схемы`,applySchema:`Применить схему`,cancel:`Отмена`,enabled:`Структурированный вывод включён`}},sidebar:{navigation:{chat:`Чат`,models:`Модели`,personas:`Персоны`,imagine:`Изображения`,settings:`Настройки`,userManagement:`Управление пользователями`,signOut:`Выйти`,agents:`Libre Claw`},toggleSize:`Переключить размер боковой панели`,expandSidebar:`Развернуть боковую панель`},user:{menu:{changePicture:`Изменить фото`,settings:`Настройки`,userManagement:`Управление пользователями`,logout:`Выйти`},avatar:{title:`Изменить фото профиля`,updated:`Фото профиля обновлено`,updateFailed:`Не удалось обновить фото профиля`,saving:`Сохранение...`,label:`Аватар`,uploadAvatarImage:`Загрузить изображение аватара`,dragAndDrop:`Перетащите изображение или нажмите для выбора`,chooseImage:`Выбрать изображение`,uploading:`Загрузка...`,enterImageUrl:`Или введите URL изображения`,supportedFormats:`Поддерживаются: JPG, PNG, GIF, WebP (макс. 2 МБ). Квадратные изображения подходят лучше всего.`,customAvatar:`Пользовательское изображение аватара`,clickToChange:`Нажмите, чтобы изменить или удалить`,removed:`Аватар удалён`,uploaded:`Аватар успешно загружен`,invalidFile:`Пожалуйста, выберите корректный файл изображения`,fileTooLarge:`Размер изображения аватара должен быть менее 2 МБ`,readFailed:`Не удалось прочитать файл изображения`,uploadFailed:`Не удалось загрузить изображение аватара`},profile:{noEmail:`Эл. почта не указана`}},settings:JSON.parse(`{"title":"Настройки","tabs":{"appearance":"Внешний вид","model":"Модель","systemMessage":"Системное сообщение","plugins":"Плагины","generation":"Генерация","documents":"Документы","tts":"Синтез речи","imageGen":"Генерация изображений","data":"Данные","about":"О программе"},"appearance":{"title":"Внешний вид","language":{"title":"Язык","description":"Выберите предпочтительный язык"},"theme":{"title":"Тема","light":"Светлая","dark":"Тёмная","amoled":"Глубокий Чёрный","system":"Системная"},"accent":{"title":"Акцентный цвет","custom":"Пользовательский цвет","useColor":"Использовать {{color}} как акцент","behaviorTitle":"Палитра интерфейса","behaviorDescription":"Выберите, останется ли акцент только на элементах управления или изменит весь светлый либо тёмный интерфейс.","defaultStyle":"По умолчанию","defaultStyleDescription":"Сохранить нейтральные поверхности светлой и тёмной темы.","adaptedStyle":"Адаптировать к акценту","adaptedStyleDescription":"Окрасить поверхности, границы и текст в акцентный цвет."},"chatInterface":{"title":"Интерфейс чата","showUsername":"Показывать имя пользователя","showUsernameDescription":"Отображать имя пользователя в сообщениях чата"},"background":{"title":"Фоновое изображение","enable":"Включить фоновое изображение","enableDescription":"Показывать пользовательский фон с эффектом размытия","blur":"Размытие","opacity":"Прозрачность","upload":"Загрузить фоновое изображение","dragDrop":"Перетащите изображение или нажмите для выбора","chooseImage":"Выбрать изображение"}},"saveSettings":"Сохранить настройки","model":{"title":"Настройки модели","defaultModel":"Модель по умолчанию","defaultModelDescription":"Эта модель будет использоваться по умолчанию для новых разговоров","selectModel":"Выберите модель","updateAll":"Обновить все модели","updateAllDescription":"Проверить обновления и загрузить последние версии всех установленных моделей","updateAllButton":"Обновить все","updating":"Обновление моделей...","currentModelInfo":"Информация о текущей модели","name":"Название","size":"Размер","family":"Семейство","format":"Формат","status":"Статус","statusStarting":"Запуск...","statusComplete":"Завершено","statusError":"Ошибка","bulkOperations":"Массовые операции","autoTitle":{"title":"Автогенерация заголовков","enable":"Включить автогенерацию заголовков","enableDescription":"Автоматически генерировать заголовки для новых разговоров","taskModel":"Модель для задач","selectTaskModel":"Выберите модель для задач","taskModelDescription":"Модель для генерации заголовков разговоров"},"persona":"Персона","updatingModel":"Обновление {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} из {{total}} моделей","modelPullAccess":"Доступ к установке моделей","modelPullAccessDescription":"Разрешить пользователям без прав администратора загружать и устанавливать новые модели.","modelPullAccessSaved":"Права на установку моделей обновлены","modelPullAccessSaveFailed":"Не удалось обновить права на установку моделей"},"systemMessage":{"title":"Системное сообщение","description":"Установите пользовательское системное сообщение, которое будет использоваться для всех новых разговоров.","placeholder":"Введите системное сообщение...","saved":"Системное сообщение сохранено","saveFailed":"Не удалось сохранить системное сообщение"},"plugins":{"title":"Плагины","description":"Управление установленными плагинами","addNew":"Добавить новый плагин","upload":"Загрузить плагин","addJson":"Добавить JSON","uploading":"Загрузка...","jsonPlaceholder":"Вставьте JSON-конфигурацию плагина...","install":"Установить плагин","noPlugins":"Плагины не установлены","noPluginsDescription":"Добавьте плагин для расширения функциональности","loading":"Загрузка плагинов...","installed":"Установленные плагины","active":"Активные плагины","activeLabel":"Активен","inactive":"Неактивен","activate":"Активировать","deactivate":"Деактивировать","models":"моделей","apiKeySet":"API-ключ установлен","apiKeyConfiguration":"Настройка API-ключа","apiKeyEnvAlternative":"Или установите переменную","environmentVariable":"переменную окружения","apiKeyConfigured":"API-ключ настроен","apiKeyPlaceholder":"Введите ваш API-ключ...","saveApiKey":"Сохранить API-ключ","apiKey":{"title":"API-ключ","placeholder":"Введите API-ключ","save":"Сохранить ключ","remove":"Удалить ключ","configured":"API-ключ настроен","notConfigured":"Требуется API-ключ","saved":"API-ключ успешно сохранён","removed":"API-ключ удалён","saveFailed":"Не удалось сохранить API-ключ","removeFailed":"Не удалось удалить API-ключ","enterKey":"Пожалуйста, введите API-ключ"},"variables":"Variables"},"generation":{"title":"Параметры генерации","description":"Настройте, как ИИ генерирует ответы","coreParameters":"Основные параметры","temperature":"Температура","temperatureDescription":"Контролирует случайность. Низкие значения — более точные, высокие — более творческие.","topP":"Top P","topPDescription":"Контролирует разнообразие через nucleus sampling. Низкие значения фокусируются на вероятных токенах.","topK":"Top K","topKDescription":"Ограничивает выбор токенов до K наиболее вероятных. Установите 0 для отключения.","minP":"Min P","minPDescription":"Минимальный порог вероятности для выбора токена.","generationControl":"Управление генерацией","maxTokens":"Макс. токенов","maxTokensDescription":"Максимальное количество токенов для генерации в ответе.","repeatPenalty":"Штраф за повторение","repeatPenaltyDescription":"Штрафует повторяющиеся токены. Высокие значения уменьшают повторения.","contextLength":"Длина контекста","contextLengthDescription":"Максимальный размер окна контекста для разговоров.","seed":"Seed","optional":"необязательно","random":"Случайный","seedDescription":"Установите конкретный seed для воспроизводимых результатов.","advancedOptions":"Расширенные параметры","presencePenalty":"Штраф за присутствие","presencePenaltyDescription":"Штрафует токены, появляющиеся в контексте.","frequencyPenalty":"Штраф за частоту","frequencyPenaltyDescription":"Штрафует часто используемые токены.","stopSequences":"Стоп-последовательности","commaSeparated":"через запятую","stopSequencesDescription":"Пользовательские токены, которые остановят генерацию при обнаружении.","resetDefaults":"Сбросить по умолчанию","saveOptions":"Сохранить параметры","embeddingSettings":"Настройки встраивания","enableEmbeddings":"Включить встраивание документов"},"documents":{"title":"Настройки документов","embeddings":{"title":"Встраивание","enable":"Включить встраивание документов","model":"Модель встраивания","modelDescription":"Выберите модель для встраивания документов","chunkSize":"Размер фрагмента","chunkSizeInTokens":"(в токенах)","chunkSizeDescription":"Размер текстовых фрагментов для встраивания","chunkOverlap":"Перекрытие фрагментов","chunkOverlapInTokens":"(в токенах)","chunkOverlapDescription":"Перекрытие между последовательными фрагментами","similarityThreshold":"Порог сходства","similarityDescription":"Минимальный балл сходства для включения результатов","status":"Статус встраивания","statusLabel":"Статус","available":"Доступно","unavailable":"Недоступно","chunksWithEmbeddings":"Фрагментов со встраиванием","coverage":"Покрытие","regenerate":"Перегенерировать встраивания","regenerating":"Перегенерация..."}},"tts":{"title":"Синтез речи","description":"Настройте параметры синтеза речи для озвучивания сообщений","loadingProviders":"Загрузка провайдеров TTS...","noProviders":"Провайдеры TTS отсутствуют","noProvidersDescription":"Настройте плагин с поддержкой TTS для включения синтеза речи","enable":"Включить TTS","enableDescription":"Разрешить синтез речи для сообщений ассистента","autoPlay":"Автовоспроизведение ответов","autoPlayDescription":"Автоматически озвучивать новые сообщения ассистента","streamSentences":"Потоковое воспроизведение предложений","streamSentencesDescription":"Воспроизводить аудио по предложениям вместо ожидания полного сообщения. Рекомендуется для локального TTS, чтобы избежать таймаутов на длинных сообщениях.","voiceConfiguration":"Настройка голоса","model":"Модель TTS","modelDescription":"Выберите модель для синтеза речи","voice":"Голос","selectVoice":"Выберите голос","voiceDescription":"Выберите голос для синтеза речи","speed":"Скорость","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Доступные провайдеры","models":"моделей","test":"Тест","testing":"Тестирование...","stop":"Стоп"},"imageGen":{"title":"Генерация изображений","description":"Настройте параметры и провайдеров генерации изображений","loadingProviders":"Загрузка провайдеров генерации изображений...","noProviders":"Провайдеры генерации изображений отсутствуют","noProvidersDescription":"Настройте плагин с поддержкой генерации изображений","enable":"Включить генерацию изображений","enableDescription":"Разрешить генерацию изображений ИИ в разговорах","configuration":"Конфигурация","model":"Модель","modelDescription":"Выберите модель для генерации изображений","size":"Размер","sizeDescription":"Разрешение генерируемых изображений","quality":"Качество","qualityDescription":"Уровень качества генерируемых изображений","style":"Стиль","styleDescription":"Пресет стиля для генерируемых изображений","availableProviders":"Доступные провайдеры","models":"моделей"},"data":{"title":"Управление данными","export":"Экспорт данных","exportDescription":"Скачайте все ваши данные, включая настройки, сессии и документы.","exportAll":"Экспортировать все данные","import":"Импорт данных","importDescription":"Импортируйте данные из предыдущего экспорта.","importData":"Импортировать данные","importing":"Импорт...","clearSessions":"Очистить сессии","clearSessionsDescription":"Удалить все сессии чата. Это действие нельзя отменить.","clearAll":"Очистить всё","clearing":"Очистка...","importOptions":"Параметры импорта","importOptionsDescription":"Выберите, как обрабатывать существующие данные","skipDuplicates":"Пропускать дубликаты","overwrite":"Перезаписывать существующие","importResults":"Результаты импорта","preferences":"Настройки","imported":"Импортировано","failed":"Ошибка","sessions":"Сессии","importedLabel":"импортировано","skipped":"пропущено","documents":"Документы","errors":"Ошибки"},"about":{"title":"О программе","versionLabel":"Версия","ollama":{"title":"Статус Ollama","version":"Версия","healthy":"Работает","unhealthy":"Не работает"},"stats":{"models":"Модели","sessions":"Сессии"},"features":{"privacy":{"title":"Конфиденциальность прежде всего","description":"Ваши данные остаются на вашем устройстве"},"openSource":{"title":"Открытый исходный код","description":"Бесплатное программное обеспечение с открытым исходным кодом"},"localInference":{"title":"Локальный вывод","description":"Запускайте модели ИИ локально с Ollama"}},"openSourceBy":"Открытый исходный код от {{company}}","links":{"title":"Ссылки","github":"GitHub","githubDescription":"Просмотр исходного кода и участие","website":"Веб-сайт","websiteDescription":"Посетите наш веб-сайт","ollama":"Ollama","ollamaDescription":"Узнайте больше об Ollama","documentation":"Документация","reportIssue":"Сообщить о проблеме","reportIssueDescription":"Отчёты об ошибках и запросы функций","gitlab":"Зеркало GitLab","gitlabDescription":"Самостоятельно размещённый репозиторий GitLab","documentationDescription":"Руководства, учебники и справочник API"},"version":"Версия {{version}}"}}`),models:{title:`Модели`,subtitle:`Загружайте, управляйте и отслеживайте ваши модели Ollama`,installed:`Установленные модели`,available:`Доступные модели`,pull:`Загрузить модель`,pulling:`Загрузка...`,delete:`Удалить модель`,deleting:`Удаление...`,size:`Размер`,modified:`Изменено`,family:`Семейство`,parameters:`Параметры`,quantization:`Квантование`,noModels:`Модели не установлены`,pullFirst:`Загрузите модель, чтобы начать`,noModelsFound:`Модели не найдены`},personas:{title:`Персоны`,create:`Создать персону`,edit:`Редактировать персону`,delete:`Удалить персону`,name:`Имя`,description:`Описание`,systemPrompt:`Системный промпт`,model:`Модель`,avatar:`Аватар`,background:`Фон`,noPersonas:`Персоны не созданы`,createFirst:`Создайте вашу первую персону для настройки опыта общения`},gallery:{title:`Галерея`,subtitle:`Ваша галерея изображений, созданных ИИ`,imageCount:`{{count}} изображений`,generate:`Создать изображение`,generateDescription:`Создавайте изображения с помощью ИИ`,generating:`Создание...`,prompt:`Промпт`,promptPlaceholder:`Опишите изображение, которое хотите создать...`,noImages:`Изображения ещё не созданы`,download:`Скачать`,delete:`Удалить`,regenerate:`Пересоздать`,model:`Модель`,size:`Размер`,quality:`Качество`,created:`Создано`},errors:{generic:`Произошла ошибка`,network:`Сетевая ошибка. Проверьте подключение.`,unauthorized:`У вас нет прав для выполнения этого действия.`,notFound:`Запрошенный ресурс не найден.`,serverError:`Ошибка сервера. Попробуйте позже.`,validation:`Проверьте введённые данные и попробуйте снова.`},keyboard:{title:`Горячие клавиши`,toggleSidebar:`Переключить боковую панель`,openSettings:`Открыть настройки`,toggleDarkMode:`Переключить тёмный режим`,showShortcuts:`Показать горячие клавиши`,closeModals:`Закрыть окна`,groups:{navigation:`Навигация`,settings:`Настройки`,general:`Общие`,chat:`Чат`},actions:{sendMessage:`Отправить сообщение`,newLine:`Новая строка в сообщении`},footer:`Нажмите {{key1}} или {{key2}} для показа справки`,tooltip:`Горячие клавиши`},modelManager:{title:`Модели`,loading:`Загрузка моделей...`,systemStatus:{online:`Ollama онлайн`,offline:`Ollama офлайн`,models:`модель`,models_plural:`моделей`,running:`запущено`,vram:`VRAM`},sections:{pull:`Загрузить новую модель`,library:`Обзор библиотеки`,running:`Запущенные модели`,local:`Локальные модели`,advanced:`Расширенные действия`,huggingface:`HuggingFace Hub`},pull:{placeholder:`Введите название модели (напр., llama3.2:3b, deepseek-r1:14b)`,button:`Загрузить`,cancel:`Отмена`,popular:`Популярные модели:`,browseAll:`Просмотреть все модели на ollama.com`,success:`Модель {{name}} успешно загружена`,cancelled:`Загрузка модели отменена`,failed:`Не удалось загрузить модель`,enterName:`Пожалуйста, введите название модели`,restricted:`Установка моделей в этом экземпляре доступна только администраторам.`},progress:{starting:`Инициализация...`,pulling:`Загрузка модели...`,pullingLayer:`загрузка`,verifying:`Проверка целостности...`,verifyingDigest:`проверка sha256 дайджеста`,writing:`Запись манифеста...`,cleaning:`Очистка...`},library:{available:`доступно`,search:`Поиск моделей...`,noResults:`Модели не найдены по вашим критериям`,installed:`Установлено`,more:`+{{count}} ещё`,refresh:`Обновить библиотеку`},local:{noModels:`Модели ещё не установлены`,pullToStart:`Загрузите модель выше, чтобы начать`,installed:`установлено`,running:`Запущено`,info:`Инфо`,copy:`Копировать`,delete:`Удалить`,deleteConfirm:`Вы уверены, что хотите удалить модель "{{name}}"?`,deleteSuccess:`Модель {{name}} успешно удалена`,deleteFailed:`Не удалось удалить модель`},advanced:{createModel:`Создать модель`,fromModelfile:`Из Modelfile`,copyModel:`Копировать модель`,duplicateExisting:`Дублировать существующую`,testEmbeddings:`Тест встраивания`,generateVectors:`Создать векторы`,healthCheck:`Проверка состояния`,testConnection:`Проверить соединение`,healthy:`Ollama работает нормально!`},modals:{details:{title:`Детали модели`,info:`Информация о модели`,family:`Семейство`,parameters:`Параметры`,quantization:`Квантование`,format:`Формат`,systemPrompt:`Системный промпт`,template:`Шаблон`,license:`Лицензия`,modelfile:`Modelfile`,noDetails:`Детали недоступны`},copy:{title:`Копировать модель`,source:`Исходная модель`,selectModel:`Выберите модель...`,newName:`Новое название модели`,placeholder:`напр., my-custom-model`,copying:`Копирование...`,button:`Копировать модель`,success:`Модель скопирована в {{name}}`,failed:`Не удалось скопировать модель`,enterBoth:`Пожалуйста, введите исходное и целевое названия`},create:{title:`Создать пользовательскую модель`,name:`Название модели`,namePlaceholder:`напр., my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
- SYSTEM You are a helpful assistant.`,see:`См.`,docs:`Документация Modelfile`,docsLink:`для справки по синтаксису`,creating:`Создание...`,button:`Создать модель`,success:`Модель {{name}} успешно создана`,failed:`Не удалось создать модель`,enterBoth:`Пожалуйста, введите название модели и содержимое Modelfile`},embeddings:{title:`Тест встраивания`,model:`Модель встраивания`,selectModel:`Выберите модель...`,recommended:`Рекомендуется: nomic-embed-text, mxbai-embed-large`,input:`Входной текст`,placeholder:`Введите текст для создания встраивания...`,generating:`Создание...`,button:`Создать встраивание`,result:`Результат ({{count}} измерений)`,success:`Создан {{count}}-мерный вектор встраивания`,failed:`Не удалось создать встраивание`,enterBoth:`Пожалуйста, выберите модель и введите текст`}},huggingface:{browseAll:`Смотреть всё на HuggingFace`,checkingGguf:`Поиск GGUF-файлов...`,noGgufAvailable:`Нет доступных GGUF-файлов для прямой загрузки в Ollama`,ggufFilesCount:`GGUF-файлы ({{count}}) - Загрузить напрямую в Ollama`,noModelsFound:`Модели не найдены`,noResults:`Модели не найдены. Попробуйте изменить поиск или фильтры.`,browseAllLink:`Смотреть всё`,search:`Поиск моделей HuggingFace...`,by:`от`,gated:`Ограниченный доступ`,viewOnHF:`Открыть на HuggingFace`,sortDownloads:`Загрузки`,sortLikes:`Лайки`,sortRecent:`Недавние`,taskTextGeneration:`Генерация текста`,taskTextToSpeech:`Текст в речь`,taskTextToImage:`Текст в изображение`,taskSpeechRecognition:`Распознавание речи`,tasks:{textGen:`Генерация текста`,tts:`Текст в речь`,image:`Текст в изображение`,stt:`Распознавание речи`},sort:{downloads:`Самые загружаемые`,likes:`Самые популярные`,recent:`Недавно обновлённые`}}},personaManager:{title:`Персоны`,subtitle:`Создавайте и управляйте персонами ИИ с пользовательскими личностями, памятью и поведением`,loading:`Загрузка персон...`,createButton:`Создать персону`,importExport:`Импорт/Экспорт`,stats:{title:`Ваши персоны`,count:`Создано {{count}} персона`,count_plural:`Создано {{count}} персон`},empty:{title:`Персон пока нет`,description:`Создайте вашу первую персону для персонализированного взаимодействия с ИИ`,button:`Создать вашу первую персону`},deleteConfirm:`Вы уверены, что хотите удалить "{{name}}"?`,deleteSuccess:`Персона "{{name}}" успешно удалена`,downloadSuccess:`Персона "{{name}}" успешно скачана`,failed:`Не удалось {{action}} персону`},personaForm:{title:{create:`Создать новую персону`,edit:`Редактировать персону`},subtitle:{create:`Создайте новую персону ИИ с пользовательской личностью, системой памяти и адаптивным обучением`,edit:`Настройте вашу персону ИИ с расширенной памятью, адаптивным обучением и интеллектуальными параметрами`},loading:`Загрузка формы...`,saved:`Сохранено`,tabs:{basic:`Основное`,parameters:`Параметры`,memory:`Память и обучение`,advanced:`Расширенное`},basic:{name:`Имя`,namePlaceholder:`Введите имя персоны`,model:`Модель`,selectModel:`Выберите модель`,description:`Описание`,descriptionPlaceholder:`Опишите вашу персону...`,systemPrompt:`Системный промпт`,systemPromptPlaceholder:`Введите системный промпт, определяющий поведение вашей персоны...`,systemPromptHint:`Системный промпт определяет, как ваша персона будет себя вести и отвечать.`},parameters:{temperature:`Температура`,temperatureHint:`Контролирует креативность vs последовательность`,topP:`Top-P`,topPHint:`Контролирует разнообразие ответов`,topK:`Top-K`,topKHint:`Ограничивает словарь до top-k токенов`,contextWindow:`Окно контекста`,contextWindowHint:`Максимальная длина истории разговора`,maxTokens:`Макс. токенов`,maxTokensHint:`Максимальная длина ответа`,repeatPenalty:`Штраф за повторение`,repeatPenaltyHint:`Уменьшает повторяющиеся ответы`},memory:{title:`Система памяти`,subtitle:`Персона запоминает разговоры со временем`,enableHint:`Включите систему памяти, чтобы ваша персона запоминала разговоры и накапливала контекст со временем.`,loading:`Загрузка статуса памяти...`,noData:`Данных памяти пока нет`,memories:`Воспоминания`,mbUsed:`МБ использовано`,lastBackup:`Последний бэкап`,never:`Никогда`,maxMemories:`Максимум воспоминаний`,maxMemoriesHint:`Сколько воспоминаний может хранить эта персона`,retention:`Срок хранения памяти`,retentionHint:`Дней до очистки воспоминаний`,autoCleanup:`Автоочистка старых воспоминаний`,wipeAll:`Очистить всю память`,wipeCannot:`Это нельзя отменить`,wipeButton:`Очистить`,wiping:`Очистка...`,wipeConfirm:`Вы уверены, что хотите очистить всю память? Это нельзя отменить.`,wipeSuccess:`Очищено {{count}} воспоминаний`},learning:{title:`Адаптивное обучение`,subtitle:`Персона развивается на основе взаимодействий`,enableHint:`Включите адаптивное обучение, чтобы ваша персона развивалась и персонализировала ответы на основе ваших взаимодействий.`,speed:`Скорость обучения`,slow:`Медленно`,slowDesc:`Постепенные изменения`,balanced:`Сбалансировано`,balancedDesc:`Умеренный темп`,fast:`Быстро`,fastDesc:`Быстрая адаптация`,autoAdapt:`Автоадаптация к предпочтениям пользователя`,whatLearns:`Что изучает персона:`,conversationTone:`Тон разговора`,responseStyle:`Стиль ответов`,userPreferences:`Предпочтения пользователя`,topicInterests:`Интересующие темы`},advanced:{embeddingModel:`Модель встраивания`,embeddingHint:`Выберите модель для кодирования памяти и семантического поиска. Модели встраивания показаны первыми, затем другие доступные модели.`,noModels:`Модели не найдены`,embeddingModels:`Модели встраивания`,otherModels:`Другие модели`,installHint:`Установите модель встраивания:`,recommended:`Рекомендуется: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`О расширенных настройках`,aboutDescription:`Модель встраивания используется системой памяти для понимания семантического значения и поиска релевантных воспоминаний во время разговоров. Выберите модель, соответствующую вашему сценарию использования и доступным ресурсам.`},actions:{cancel:`Отмена`,save:`Сохранить`,saving:`Сохранение...`,saveClose:`Сохранить и закрыть`,create:`Создать`},success:{created:`Персона создана`,updated:`Персона обновлена`},error:{saveFailed:`Не удалось сохранить`}},personaCard:{enhanced:`Улучшенная`,systemPrompt:`Системный промпт`,memories:`воспоминаний`,use:`Использовать`,editTooltip:`Редактировать персону`,downloadTooltip:`Скачать персону`,backup:`Бэкап`,exportDNA:`Экспорт ДНК`,wipeMemories:`Очистить память`,wipeConfirm:`Вы уверены, что хотите очистить всю память этой персоны? Это действие нельзя отменить.`,wipeSuccess:`Очищено {{count}} воспоминаний`,backupSuccess:`Бэкап персоны успешно скачан`,dnaSuccess:`ДНК персоны успешно экспортирована`,failed:`Не удалось {{action}}`},userManager:{title:`Управление пользователями`,subtitle:`Управление аккаунтами и правами пользователей`,pageDescription:`Управляйте учетными записями пользователей, разрешениями и контролем доступа для вашего экземпляра Libre WebUI.`,loading:`Загрузка пользователей...`,createUser:`Создать пользователя`,search:`Поиск пользователей...`,noUsers:`Пользователи не найдены`,noUsersMatching:`Пользователи по вашему запросу не найдены`,columns:{user:`Пользователь`,email:`Эл. почта`,role:`Роль`,created:`Создан`,actions:`Действия`},roles:{admin:`Администратор`,user:`Пользователь`},noEmail:`Нет эл. почты`,deleteConfirm:`Вы уверены, что хотите удалить пользователя "{{name}}"?`,deleteSuccess:`Пользователь успешно удалён`,deleteFailed:`Не удалось удалить пользователя`,cannotDeleteSelf:`Вы не можете удалить свой аккаунт`,form:{title:{create:`Создать пользователя`,edit:`Редактировать пользователя`},username:`Имя пользователя`,usernamePlaceholder:`Введите имя пользователя`,email:`Эл. почта`,emailPlaceholder:`Введите эл. почту (необязательно)`,password:`Пароль`,passwordPlaceholder:`Введите пароль`,passwordHint:`Оставьте пустым, чтобы сохранить текущий пароль`,role:`Роль`,creating:`Создание...`,updating:`Обновление...`,createButton:`Создать пользователя`,updateButton:`Обновить пользователя`,createSuccess:`Пользователь успешно создан`,updateSuccess:`Пользователь успешно обновлён`,createFailed:`Не удалось создать пользователя`,updateFailed:`Не удалось обновить пользователя`}},chatHistory:{label:`История разговора`,jumpToTurn:`Перейти к реплике {{index}} из {{total}}`},chatMessage:{you:`Вы`,assistant:`Ассистент`,system:`Система`,copy:`Копировать`,copyMessage:`Копировать сообщение`,copied:`Скопировано!`,regenerate:`Пересоздать`,regenerateResponse:`Пересоздать ответ`,edit:`Редактировать`,editSystemMessage:`Редактировать системное сообщение`,saveChanges:`Сохранить изменения`,cancelEditing:`Отменить редактирование`,delete:`Удалить`,deleteConfirm:`Удалить это сообщение?`,branch:`Ветка`,speaking:`Озвучивание...`,speakMessage:`Озвучить сообщение`,stopSpeaking:`Остановить озвучивание`,showMore:`Показать больше`,showLess:`Показать меньше`,thinking:`Думает`,systemMessagePlaceholder:`Введите ваше системное сообщение...`,fullSizeImage:`Изображение в полном размере`,startConversation:`Начать разговор`,startConversationDescription:`Отправьте сообщение, чтобы начать общение с вашим ИИ-ассистентом. Задавайте вопросы, получайте помощь с кодом или ведите обычный разговор.`,scrollToBottom:`Прокрутить вниз`,newMessages:`Новые сообщения`},imageGallery:{title:`Галерея изображений`,noImages:`Изображений пока нет`,noImagesHint:`Создайте первое изображение с помощью панели справа`,delete:`Удалить`,download:`Скачать`,deleteConfirm:`Вы уверены, что хотите удалить это изображение?`,deleteSuccess:`Изображение удалено`,deleteFailed:`Не удалось удалить изображение`,downloadFailed:`Не удалось скачать изображение`,loadMore:`Загрузить ещё ({{current}} из {{total}})`,loadFailed:`Не удалось загрузить галерею`},imageGeneration:{title:`Создать изображение`,prompt:`Промпт`,promptPlaceholder:`Опишите изображение, которое хотите создать...`,model:`Модель`,selectModel:`Выберите модель`,noModels:`Модели генерации изображений недоступны`,configurePlugin:`Настройте плагин с поддержкой генерации изображений`,size:`Размер`,quality:`Качество`,style:`Стиль`,generate:`Создать`,generating:`Создание...`,success:`Изображение успешно создано`,failed:`Не удалось создать изображение`,enterPrompt:`Пожалуйста, введите промпт`,promptTooLong:`Промпт превышает максимальную длину в {{max}} символов`},errorBoundary:{title:`Что-то пошло не так`,description:`Произошла непредвиденная ошибка. Попробуйте обновить страницу.`,tryAgain:`Обновить страницу`,goHome:`На главную`,errorDetails:`Детали ошибки (Разработка)`},documents:{title:`Документы`,upload:`Загрузить документ`,uploading:`Загрузка...`,noDocuments:`Документы не загружены`,uploadHint:`Загрузите документы для использования в разговорах`,delete:`Удалить`,deleteConfirm:`Вы уверены, что хотите удалить этот документ?`,deleteSuccess:`Документ удалён`,deleteFailed:`Не удалось удалить документ`,uploadSuccess:`Документ успешно загружен`,uploadFailed:`Не удалось загрузить документ`,types:`Поддерживаются: PDF, TXT, MD, DOCX`,unsupportedFileType:`Поддерживаются только файлы PDF и TXT`,fileSizeTooLarge:`Размер файла должен быть менее 10 МБ`,uploadSuccessWithName:`Документ "{{name}}" успешно загружен`,removeSuccess:`Документ успешно удалён`,removeFailed:`Не удалось удалить документ`,removeError:`Произошла ошибка при удалении документа`,clickToUpload:`Нажмите для загрузки`,orDragAndDrop:`или перетащите`,fileTypesAndSize:`Файлы PDF или TXT до 10 МБ`,uploadedDocuments:`Загруженные документы`,removeDocument:`Удалить документ`},ttsButton:{speak:`Озвучить`,stop:`Стоп`,speaking:`Озвучивание...`,generateFailed:`Не удалось сгенерировать речь`,playbackFailed:`Ошибка воспроизведения аудио`,stopSpeaking:`Остановить озвучивание`,generatingSpeech:`Генерация речи...`,readAloud:`Читать вслух`},artifacts:{title:`Артефакты`,code:`Код`,preview:`Предпросмотр`,copy:`Копировать код`,copied:`Скопировано!`,download:`Скачать`,expand:`Развернуть`,collapse:`Свернуть`,openInNewTab:`Открыть в новой вкладке`,invalidSvg:`Недопустимое содержимое SVG`,invalidJson:`Недопустимое содержимое JSON`,previewMode:`Режим предпросмотра`,codeMode:`Режим кода`,copyContent:`Копировать содержимое`,openInPanel:`Открыть в панели`,openInNewWindow:`Открыть в новом окне`,created:`Создано`,closePanelEsc:`Закрыть панель (Esc)`,copyButton:`Копировать`,open:`Открыть`,dragEdgeToResize:`Перетащите край для изменения размера`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`},personaImportExport:{title:`Импорт и экспорт персон`,description:`Экспортируйте персоны для обмена или импортируйте персоны от других`,exportPersonas:`Экспорт персон`,importPersonas:`Импорт персон`,noPersonasToExport:`Нет персон для экспорта`,personasAvailable:`Доступно {{count}} персона`,personasAvailable_plural:`Доступно {{count}} персон`,exportAll:`Экспортировать всё`,uploadJsonFile:`Загрузить JSON-файл`,pasteJsonLabel:`Вставить данные JSON`,pasteJsonPlaceholder:`Вставьте данные персоны в формате JSON...`,importing:`Импорт...`,importButton:`Импортировать персону(ы)`,expectedFormat:`Ожидаемый формат JSON:`,exportSuccess:`Персона "{{name}}" успешно экспортирована`,exportFailed:`Не удалось экспортировать персону`,exportAllSuccess:`Все {{count}} персон успешно экспортированы`,exportAllFailed:`Не удалось экспортировать персоны`,pasteJsonData:`Пожалуйста, вставьте данные персоны в формате JSON`,importMultipleSuccess:`Успешно импортировано {{count}} персон`,importMultipleFailed:`Не удалось импортировать {{count}} персон`,importNoneFailed:`Не удалось импортировать ни одну персону`,importSuccess:`Персона успешно импортирована`,importFailed:`Не удалось импортировать персону`},generationStats:{details:`Подробности`,promptTokens:`Токены промпта:`,generatedTokens:`Сгенерированные токены:`,totalTokens:`Всего токенов:`,speed:`Скорость:`,promptEval:`Оценка промпта:`,generation:`Генерация:`,modelLoad:`Загрузка модели:`,totalTime:`Общее время:`,generatedAt:`Сгенерировано в:`},userMenu:{loggedOut:`Вы вышли из системы`,pictureUpdated:`Фото профиля обновлено`,failedUpdateAvatar:`Не удалось обновить аватар`,failedUpdatePicture:`Не удалось обновить фото профиля`,noEmail:`Email не указан`,changePicture:`Изменить фото`,settings:`Настройки`,userManagement:`Управление пользователями`,signOut:`Выйти`,changeProfilePicture:`Изменить фото профиля`},pluginManager:{title:`Менеджер плагинов`,upload:`Загрузить`,addJson:`Добавить JSON`,browseHF:`Обзор HF Hub`,confirmDelete:`Вы уверены, что хотите удалить этот плагин?`,uploading:`Загрузка плагина...`,pasteJson:`Вставьте JSON плагина сюда...`,installPlugin:`Установить плагин`,loading:`Загрузка плагинов...`,noPlugins:`Нет установленных плагинов`,noPluginsDescription:`Загрузите файл плагина или добавьте плагин из JSON.`,active:`Активен`,id:`ID`,endpoint:`Эндпоинт`,activate:`Активировать`,deactivate:`Деактивировать`,activePlugin:`Активный плагин`,activePluginDescription:`Все запросы чата будут направляться через этот плагин`,variables:{title:`Переменные`,save:`Сохранить`,saving:`Сохранение...`,saved:`Переменные сохранены`,saveFailed:`Не удалось сохранить переменные`,resetDefaults:`Сбросить по умолчанию`,reset:`Переменные сброшены`,sensitiveSet:`Значение задано (введите новое для изменения)`}},huggingface:{title:`Браузер моделей HuggingFace`,subtitle:`Просматривайте и выбирайте модели из Hub`,searchPlaceholder:`Поиск моделей...`,filters:`Фильтры`,task:`Задача`,sortBy:`Сортировать по`,noModels:`Модели не найдены`,adjustSearch:`Попробуйте изменить поисковый запрос или фильтры`,gated:`Ограниченный`,selected:`Выбрано`,select:`Выбрать`,refresh:`Обновить`,modelsFound:`моделей найдено`},demoMode:{title:`Демо-режим`,github:`GitHub`},personaBackground:{label:`Фоновое изображение`,uploadBackgroundImage:`Загрузить фоновое изображение`,dragAndDrop:`Перетащите изображение или нажмите для выбора`,chooseImage:`Выбрать изображение`,uploading:`Загрузка...`,enterImageUrl:`Или введите URL изображения`,supportedFormats:`Поддерживает: JPG, PNG, GIF, WebP (макс. 5МБ). Широкие альбомные изображения подходят лучше.`,customBackground:`Пользовательское фоновое изображение`,clickToChange:`Нажмите для изменения или удаления`,removed:`Фон удален`,uploaded:`Фон успешно загружен`,invalidFile:`Пожалуйста, выберите действительный файл изображения`,fileTooLarge:`Размер фонового изображения должен быть менее 5МБ`,readFailed:`Не удалось прочитать файл изображения`,uploadFailed:`Не удалось загрузить фоновое изображение`},modelSelector:{searchInstalled:`Поиск установленных моделей...`,searchOllama:`Поиск в библиотеке Ollama...`,searchHuggingFace:`Поиск на HuggingFace...`,selectModel:`Выбрать модель`,personas:`Персоны`,ollamaModels:`Модели Ollama`,pluginModels:`Модели плагинов`,actions:`Действия`,installed:`Установлено`,use:`Использовать`,pull:`Загрузить`,pullRestricted:`Установка моделей в этом экземпляре доступна только администраторам.`,adminOnlyPull:`Только администраторы`},libreClaw:{title:`Libre Claw`,subtitle:`Запуск локального агента, утверждения, расписания, память, инструменты и использование.`,dashboard:`Панель управления`,connection:{disconnectedTitle:`Демон Libre Claw не подключен`,disconnectedDescription:`Запустите его локально с <command>libre-claw start</command> или установите <env>LIBRE_CLAW_BASE_URL</env> во внутренней среде.`},status:{connected:`Подключено`,disconnected:`Отключено`,activeRuns:`{{count}} активен`,activeRuns_plural:`{{count}} активен`},states:{queued:`В очереди`,running:`Выполняется`,blocked:`Заблокировано`,done:`Готово`,failed:`Не удалось`,cancelled:`Отменено`},startRun:{title:`Запустить выполнение агента`,placeholder:`Попросите Libre Claw проверить репозиторий, исправить ошибку, выполнить проверку, запланировать отчет...`,chatRun:`Бег в чате`,goalMode:`Режим цели`,providerOverride:`Переопределение поставщика`,modelOverride:`Переопределение модели`,run:`Запустить`},modelRoute:{title:`Модельный маршрут`,providerPlaceholder:`поставщик`,modelPlaceholder:`модель`,persistGlobal:`Сохранять глобальную конфигурацию Libre Claw`,saveModel:`Сохранить модель`,theme:`Тема Libre Claw`,saveTheme:`Сохранить тему`},runs:{title:`Запуски`,empty:`Запусков Libre Claw пока нет.`},timeline:{title:`Хронология выполнения`,empty:`Выберите запуск, чтобы просмотреть его события.`,streaming:`Потоковая передача...`,assistantResponse:`Ответ Ассистента`,resultOk:`ок`,resultError:`ошибка`,labels:{userMessage:`Сообщение пользователя`,toolCall:`Вызов инструмента`,toolResult:`Результат инструмента`,approvalRequest:`Запрос на одобрение`,approvalResponse:`Ответ на одобрение`,runStarted:`Запуск начат`,runFinished:`Запуск завершен`,usage:`Использование`,error:`Ошибка`}},approvals:{needed:`Требуется одобрение`,allowOnce:`Разрешить один раз`,alwaysAllowTool:`Всегда разрешать инструмент`,deny:`Отклонить`,toolApprovalRequested:`Требуется одобрение инструмента`},automations:{title:`Автоматизация`,namePlaceholder:`Имя`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Подсказка автоматизации`,create:`Создать`,empty:`Никакой запланированной автоматизации Libre Claw.`,runNow:`Запустить сейчас`,pause:`Пауза`,resume:`Возобновить`,routes:{report:`Отчет`,telegram:`Telegram`},status:{active:`Активный`,paused:`Приостановлено`}},usageFallback:{title:`Использование и резервный вариант`,usage:`Использование`,fallbackRoute:`Резервный маршрут`,noUsage:`Записей об использовании пока нет.`},metrics:{provider:`Поставщик`,model:`Модель`,input:`Ввод`,output:`Выход`,cached:`Кэшированный`,reasoning:`Рассуждение`,cost:`Стоимость`,tool:`Инструмент`,resolution:`Разрешение`,state:`Состояние`,stopReason:`Причина остановки`,tokens:`{{formatted}} жетон`,tokens_plural:`{{formatted}} жетоны`},fallbacks:{tool:`инструмент`,unknown:`неизвестно`,resolved:`решено`,unknownError:`Неизвестная ошибка`},toasts:{loadStatusFailed:`Не удалось загрузить статус Libre Claw.`,enterTask:`Введите задачу на Libre Claw`,runStarted:`Запуск Libre Claw начат`,startRunFailed:`Не удалось запустить Libre Claw`,runCancelled:`Запуск отменен`,cancelRunFailed:`Не удалось отменить запуск`,approved:`Утверждено`,denied:`Отказано`,resolvePermissionFailed:`Не удалось разрешить разрешение`,providerModelRequired:`Требуется поставщик и модель.`,modelUpdated:`Модель Libre Claw обновлена`,updateModelFailed:`Не удалось обновить модель`,themeUpdated:`Тема Libre Claw обновлена`,updateThemeFailed:`Не удалось обновить тему`,automationRequired:`Укажите название автоматизации, расписание и подсказку.`,automationCreated:`Автоматизация создана`,createAutomationFailed:`Не удалось создать автоматизацию`,automationUpdated:`Автоматизация обновлена`,updateAutomationFailed:`Не удалось обновить автоматизацию`}}};export{e as default};
1
+ var e={common:{loading:`Загрузка...`,save:`Сохранить`,saving:`Сохранение...`,cancel:`Отмена`,delete:`Удалить`,edit:`Редактировать`,close:`Закрыть`,back:`Назад`,next:`Далее`,confirm:`Подтвердить`,error:`Ошибка`,success:`Успешно`,warning:`Предупреждение`,or:`или`,optional:`необязательно`,enabled:`Включено`,disabled:`Отключено`,on:`Вкл`,off:`Выкл`,yes:`Да`,no:`Нет`,search:`Поиск`,noResults:`Ничего не найдено`,retry:`Повторить`,refresh:`Обновить`,download:`Скачать`,upload:`Загрузить`,export:`Экспорт`,import:`Импорт`,reset:`Сбросить`,apply:`Применить`,clear:`Очистить`,all:`Все`,none:`Нет`,default:`По умолчанию`,custom:`Пользовательский`,remove:`Удалить`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`С возвращением`,subtitle:`Войдите в свой аккаунт, чтобы продолжить`,username:`Имя пользователя`,usernamePlaceholder:`Введите имя пользователя`,password:`Пароль`,passwordPlaceholder:`Введите пароль`,signIn:`Войти`,signingIn:`Вход...`,noAccount:`Нет аккаунта?`,signUpHere:`Зарегистрируйтесь здесь`,loginSuccess:`Вход выполнен успешно!`,loginFailed:`Ошибка входа`,checkCredentials:`Ошибка входа. Проверьте учётные данные.`,enterBoth:`Пожалуйста, введите имя пользователя и пароль`,githubSuccess:`Вход через GitHub выполнен успешно!`,githubFailed:`Ошибка аутентификации GitHub`,githubVerifyFailed:`Не удалось проверить аутентификацию GitHub`},signup:{title:`Создать аккаунт`,subtitle:`Зарегистрируйте новый аккаунт`,username:`Имя пользователя`,usernamePlaceholder:`Выберите имя пользователя`,email:`Эл. почта`,emailPlaceholder:`ваш@email.com`,password:`Пароль`,passwordPlaceholder:`Выберите пароль`,confirmPassword:`Подтвердите пароль`,confirmPasswordPlaceholder:`Подтвердите ваш пароль`,createAccount:`Создать аккаунт`,creatingAccount:`Создание аккаунта...`,hasAccount:`Уже есть аккаунт?`,signInHere:`Войдите здесь`,signupSuccess:`Аккаунт успешно создан!`,signupFailed:`Ошибка регистрации`,tryAgain:`Ошибка регистрации. Попробуйте снова.`,usernameRequired:`Имя пользователя и пароль обязательны`,passwordMismatch:`Пароли не совпадают`,passwordTooShort:`Пароль должен содержать не менее 6 символов`},logout:{button:`Выйти`,success:`Выход выполнен успешно`},oauth:{continueWith:`Продолжить через {{provider}}`,connectingTo:`Подключение к {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Проверка аутентификации...`,welcome:`Добро пожаловать`,noEmail:`Email не указан`,role:`Роль`,id:`ID`,userId:`ID пользователя`,signInDescription:`Войдите с помощью учётной записи GitHub, чтобы продолжить`,signInWithGitHub:`Войти через GitHub`,jwtActive:`JWT-аутентификация активна`,jwtDescription:`JWT-аутентификация с GitHub OAuth`,github:`GitHub`,provider:`Провайдер`},setup:{welcome:{title:`Добро пожаловать в Libre WebUI`,subtitle:`Давайте начнём`,description:`Настройте ваш экземпляр Libre WebUI за несколько шагов`,createAdmin:`Создать аккаунт администратора`,features:{secure:{title:`Безопасность и конфиденциальность`,description:`Ваши разговоры остаются на вашем устройстве`},fast:{title:`Быстрый и отзывчивый`,description:`Оптимизирован для скорости и производительности`},openSource:{title:`Открытый исходный код`,description:`Бесплатное программное обеспечение с открытым исходным кодом`}}},admin:{title:`Создать аккаунт администратора`,subtitle:`Настройка администратора`,description:`Создайте первый аккаунт администратора для вашего экземпляра Libre WebUI`,usernamePlaceholder:`Введите имя администратора`,passwordPlaceholder:`Введите пароль (мин. 6 символов)`,confirmPlaceholder:`Подтвердите пароль`,creating:`Создание...`,createAdmin:`Создать администратора`,success:`Аккаунт администратора успешно создан!`,failed:`Не удалось создать аккаунт администратора`,fillAllFields:`Пожалуйста, заполните все поля`,note:`Это будет основной аккаунт администратора для вашего экземпляра Libre WebUI`},encryptionKey:{title:`Сохраните ваш ключ шифрования`,subtitle:`Важно: Сохраните этот ключ`,description:`Этот ключ шифрования защищает ваши конфиденциальные данные. Храните его надёжно — он понадобится при восстановлении базы данных.`,warning:`Предупреждение`,warningText:`Если вы потеряете этот ключ и вам потребуется восстановить базу данных, ваши зашифрованные данные (API-ключи, настройки) будут утеряны безвозвратно.`,label:`Ваш ключ шифрования`,loading:`Загрузка...`,copyToClipboard:`Копировать в буфер обмена`,copied:`Ключ шифрования скопирован в буфер обмена!`,copyFailed:`Не удалось скопировать ключ в буфер обмена`,envNote:`Этот ключ также сохранён в файле backend/.env как ENCRYPTION_KEY`,acknowledgment:`Я сохранил ключ шифрования в надёжном месте и понимаю, что его потеря может привести к утрате данных.`,confirmRequired:`Пожалуйста, подтвердите, что вы сохранили ключ шифрования`,continue:`Продолжить к Libre WebUI`}},chat:{greeting:{morning:`Доброе утро`,afternoon:`Добрый день`,evening:`Добрый вечер`,night:`Доброй ночи`},welcome:{helpToday:`Чем могу помочь сегодня?`,helpTonight:`Чем могу помочь сегодня вечером?`,variety:{create:{title:`Что будем создавать?`,subtitle:`Начните с мысли, наброска или задачи, которая никак не поддаётся.`},explore:{title:`С чего начнём?`,subtitle:`Расскажите о вопросе, к которому постоянно возвращаетесь.`},imagine:{title:`Что вы представляете?`,subtitle:`Мы можем вместе придать этому форму.`},focus:{title:`Что заслуживает вашего внимания?`,subtitle:`Давайте проясним следующий шаг.`},untangle:{title:`Что нужно распутать?`,subtitle:`Для начала покажите всё как есть, даже если пока хаотично.`},momentum:{title:`Начнём, когда будете готовы.`,subtitle:`Вернитесь к идее, плану или незаконченной теме.`},open:{title:`О чём вы думаете?`,subtitle:`Небольшая мысль или амбициозный проект. Подойдёт и то и другое.`},challenge:{title:`Что мы решаем?`,subtitle:`Расскажите, что пока не работает.`},draft:{title:`Давайте с чего-нибудь начнём.`,subtitle:`Необязательно сразу доводить до блеска.`},possibility:{title:`Во что это может превратиться?`,subtitle:`Покажите мне исходный материал.`},unexpected:{title:`Создадим что-нибудь неожиданное.`,subtitle:`Дайте мне ограничение, настроение или не до конца оформленную идею.`}}},input:{placeholder:`Отправить сообщение`,messagePlaceholder:`Сообщение...`,attachImages:`Прикрепить изображения`,attachments:`Вложения и дополнительные функции`,sendMessage:`Отправить сообщение`,stopGeneration:`Остановить генерацию`},session:{new:`Новый чат`,work:`Работа`,chat:`Чат`,private:`Приватный`,privateMode:`Приватный режим`,privateDescription:`Этот разговор не будет сохранён`,privateTooltip:`Начать приватный разговор, который не будет сохранён`,deleteConfirm:`Вы уверены, что хотите удалить этот чат?`,generatingTitle:`Генерация заголовка`,noChats:`Чатов пока нет`,createFirst:`Создайте свой первый чат выше`,chats:`Чаты`,renameChat:`Переименовать чат`,deleteChat:`Удалить чат`},persona:{applied:`Персона применена`,label:`Персона`},model:{updated:`Модель обновлена`,noModels:`Модели недоступны`,noModelsDescription:`Модели недоступны. Убедитесь, что Ollama запущен и модели установлены.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`Модели недоступны. Убедитесь, что Ollama запущен и модели установлены.`},footer:{disclaimer:`ИИ может ошибаться — проверяйте важную информацию`,images:`{{count}} изображение`,images_plural:`{{count}} изображений`,structuredOutput:`Структурированный вывод`},mediaUpload:{dropImagesHere:`Перетащите изображения сюда или`,supportedFormats:`Поддерживаются: JPG, PNG, GIF, WebP (макс. 10 МБ каждый)`,browse:`выберите`},structuredOutput:{title:`Формат ответа`,none:`Нет (естественный язык)`,noneDescription:`Стандартный ответ на естественном языке`,json:`JSON`,jsonDescription:`Структурированный формат JSON`,list:`Список`,listDescription:`Массив элементов`,summary:`Резюме`,summaryDescription:`Краткое изложение документа с ключевыми моментами`,analysis:`Анализ`,analysisDescription:`Структурированный анализ с плюсами/минусами`,custom:`Пользовательская схема`,customDescription:`Определите собственную JSON-схему`,customSchema:`Пользовательская JSON-схема`,schemaPreview:`Предпросмотр схемы`,applySchema:`Применить схему`,cancel:`Отмена`,enabled:`Структурированный вывод включён`}},sidebar:{navigation:{chat:`Чат`,models:`Модели`,personas:`Персоны`,imagine:`Изображения`,settings:`Настройки`,userManagement:`Управление пользователями`,signOut:`Выйти`,agents:`Libre Claw`,work:`Работа`},toggleSize:`Переключить размер боковой панели`,expandSidebar:`Развернуть боковую панель`},user:{menu:{changePicture:`Изменить фото`,settings:`Настройки`,userManagement:`Управление пользователями`,logout:`Выйти`},avatar:{title:`Изменить фото профиля`,updated:`Фото профиля обновлено`,updateFailed:`Не удалось обновить фото профиля`,saving:`Сохранение...`,label:`Аватар`,uploadAvatarImage:`Загрузить изображение аватара`,dragAndDrop:`Перетащите изображение или нажмите для выбора`,chooseImage:`Выбрать изображение`,uploading:`Загрузка...`,enterImageUrl:`Или введите URL изображения`,supportedFormats:`Поддерживаются: JPG, PNG, GIF, WebP (макс. 2 МБ). Квадратные изображения подходят лучше всего.`,customAvatar:`Пользовательское изображение аватара`,clickToChange:`Нажмите, чтобы изменить или удалить`,removed:`Аватар удалён`,uploaded:`Аватар успешно загружен`,invalidFile:`Пожалуйста, выберите корректный файл изображения`,fileTooLarge:`Размер изображения аватара должен быть менее 2 МБ`,readFailed:`Не удалось прочитать файл изображения`,uploadFailed:`Не удалось загрузить изображение аватара`},profile:{noEmail:`Эл. почта не указана`}},settings:JSON.parse(`{"title":"Настройки","tabs":{"appearance":"Внешний вид","model":"Модель","systemMessage":"Системное сообщение","plugins":"Плагины","generation":"Генерация","documents":"Документы","tts":"Синтез речи","imageGen":"Генерация изображений","data":"Данные","about":"О программе"},"appearance":{"title":"Внешний вид","language":{"title":"Язык","description":"Выберите предпочтительный язык"},"theme":{"title":"Тема","light":"Светлая","dark":"Тёмная","amoled":"Глубокий Чёрный","system":"Системная"},"accent":{"title":"Акцентный цвет","custom":"Пользовательский цвет","useColor":"Использовать {{color}} как акцент","behaviorTitle":"Палитра интерфейса","behaviorDescription":"Выберите, останется ли акцент только на элементах управления или изменит весь светлый либо тёмный интерфейс.","defaultStyle":"По умолчанию","defaultStyleDescription":"Сохранить нейтральные поверхности светлой и тёмной темы.","adaptedStyle":"Адаптировать к акценту","adaptedStyleDescription":"Окрасить поверхности, границы и текст в акцентный цвет."},"chatInterface":{"title":"Интерфейс чата","showUsername":"Показывать имя пользователя","showUsernameDescription":"Отображать имя пользователя в сообщениях чата"},"background":{"title":"Фоновое изображение","enable":"Включить фоновое изображение","enableDescription":"Показывать пользовательский фон с эффектом размытия","blur":"Размытие","opacity":"Прозрачность","upload":"Загрузить фоновое изображение","dragDrop":"Перетащите изображение или нажмите для выбора","chooseImage":"Выбрать изображение"}},"saveSettings":"Сохранить настройки","model":{"title":"Настройки модели","defaultModel":"Модель по умолчанию","defaultModelDescription":"Эта модель будет использоваться по умолчанию для новых разговоров","selectModel":"Выберите модель","updateAll":"Обновить все модели","updateAllDescription":"Проверить обновления и загрузить последние версии всех установленных моделей","updateAllButton":"Обновить все","updating":"Обновление моделей...","currentModelInfo":"Информация о текущей модели","name":"Название","size":"Размер","family":"Семейство","format":"Формат","status":"Статус","statusStarting":"Запуск...","statusComplete":"Завершено","statusError":"Ошибка","bulkOperations":"Массовые операции","autoTitle":{"title":"Автогенерация заголовков","enable":"Включить автогенерацию заголовков","enableDescription":"Автоматически генерировать заголовки для новых разговоров","taskModel":"Модель для задач","selectTaskModel":"Выберите модель для задач","taskModelDescription":"Модель для генерации заголовков разговоров"},"persona":"Персона","updatingModel":"Обновление {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} из {{total}} моделей","modelPullAccess":"Доступ к установке моделей","modelPullAccessDescription":"Разрешить пользователям без прав администратора загружать и устанавливать новые модели.","modelPullAccessSaved":"Права на установку моделей обновлены","modelPullAccessSaveFailed":"Не удалось обновить права на установку моделей"},"systemMessage":{"title":"Системное сообщение","description":"Установите пользовательское системное сообщение, которое будет использоваться для всех новых разговоров.","placeholder":"Введите системное сообщение...","saved":"Системное сообщение сохранено","saveFailed":"Не удалось сохранить системное сообщение"},"plugins":{"title":"Плагины","description":"Управление установленными плагинами","addNew":"Добавить новый плагин","upload":"Загрузить плагин","addJson":"Добавить JSON","uploading":"Загрузка...","jsonPlaceholder":"Вставьте JSON-конфигурацию плагина...","install":"Установить плагин","noPlugins":"Плагины не установлены","noPluginsDescription":"Добавьте плагин для расширения функциональности","loading":"Загрузка плагинов...","installed":"Установленные плагины","active":"Активные плагины","activeLabel":"Активен","inactive":"Неактивен","activate":"Активировать","deactivate":"Деактивировать","models":"моделей","apiKeySet":"API-ключ установлен","apiKeyConfiguration":"Настройка API-ключа","apiKeyEnvAlternative":"Или установите переменную","environmentVariable":"переменную окружения","apiKeyConfigured":"API-ключ настроен","apiKeyPlaceholder":"Введите ваш API-ключ...","saveApiKey":"Сохранить API-ключ","apiKey":{"title":"API-ключ","placeholder":"Введите API-ключ","save":"Сохранить ключ","remove":"Удалить ключ","configured":"API-ключ настроен","notConfigured":"Требуется API-ключ","saved":"API-ключ успешно сохранён","removed":"API-ключ удалён","saveFailed":"Не удалось сохранить API-ключ","removeFailed":"Не удалось удалить API-ключ","enterKey":"Пожалуйста, введите API-ключ"},"variables":"Variables"},"generation":{"title":"Параметры генерации","description":"Настройте, как ИИ генерирует ответы","coreParameters":"Основные параметры","temperature":"Температура","temperatureDescription":"Контролирует случайность. Низкие значения — более точные, высокие — более творческие.","topP":"Top P","topPDescription":"Контролирует разнообразие через nucleus sampling. Низкие значения фокусируются на вероятных токенах.","topK":"Top K","topKDescription":"Ограничивает выбор токенов до K наиболее вероятных. Установите 0 для отключения.","minP":"Min P","minPDescription":"Минимальный порог вероятности для выбора токена.","generationControl":"Управление генерацией","maxTokens":"Макс. токенов","maxTokensDescription":"Максимальное количество токенов для генерации в ответе.","repeatPenalty":"Штраф за повторение","repeatPenaltyDescription":"Штрафует повторяющиеся токены. Высокие значения уменьшают повторения.","contextLength":"Длина контекста","contextLengthDescription":"Максимальный размер окна контекста для разговоров.","seed":"Seed","optional":"необязательно","random":"Случайный","seedDescription":"Установите конкретный seed для воспроизводимых результатов.","advancedOptions":"Расширенные параметры","presencePenalty":"Штраф за присутствие","presencePenaltyDescription":"Штрафует токены, появляющиеся в контексте.","frequencyPenalty":"Штраф за частоту","frequencyPenaltyDescription":"Штрафует часто используемые токены.","stopSequences":"Стоп-последовательности","commaSeparated":"через запятую","stopSequencesDescription":"Пользовательские токены, которые остановят генерацию при обнаружении.","resetDefaults":"Сбросить по умолчанию","saveOptions":"Сохранить параметры","embeddingSettings":"Настройки встраивания","enableEmbeddings":"Включить встраивание документов"},"documents":{"title":"Настройки документов","embeddings":{"title":"Встраивание","enable":"Включить встраивание документов","model":"Модель встраивания","modelDescription":"Выберите модель для встраивания документов","chunkSize":"Размер фрагмента","chunkSizeInTokens":"(в токенах)","chunkSizeDescription":"Размер текстовых фрагментов для встраивания","chunkOverlap":"Перекрытие фрагментов","chunkOverlapInTokens":"(в токенах)","chunkOverlapDescription":"Перекрытие между последовательными фрагментами","similarityThreshold":"Порог сходства","similarityDescription":"Минимальный балл сходства для включения результатов","status":"Статус встраивания","statusLabel":"Статус","available":"Доступно","unavailable":"Недоступно","chunksWithEmbeddings":"Фрагментов со встраиванием","coverage":"Покрытие","regenerate":"Перегенерировать встраивания","regenerating":"Перегенерация..."}},"tts":{"title":"Синтез речи","description":"Настройте параметры синтеза речи для озвучивания сообщений","loadingProviders":"Загрузка провайдеров TTS...","noProviders":"Провайдеры TTS отсутствуют","noProvidersDescription":"Настройте плагин с поддержкой TTS для включения синтеза речи","enable":"Включить TTS","enableDescription":"Разрешить синтез речи для сообщений ассистента","autoPlay":"Автовоспроизведение ответов","autoPlayDescription":"Автоматически озвучивать новые сообщения ассистента","streamSentences":"Потоковое воспроизведение предложений","streamSentencesDescription":"Воспроизводить аудио по предложениям вместо ожидания полного сообщения. Рекомендуется для локального TTS, чтобы избежать таймаутов на длинных сообщениях.","voiceConfiguration":"Настройка голоса","model":"Модель TTS","modelDescription":"Выберите модель для синтеза речи","voice":"Голос","selectVoice":"Выберите голос","voiceDescription":"Выберите голос для синтеза речи","speed":"Скорость","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Доступные провайдеры","models":"моделей","test":"Тест","testing":"Тестирование...","stop":"Стоп"},"imageGen":{"title":"Генерация изображений","description":"Настройте параметры и провайдеров генерации изображений","loadingProviders":"Загрузка провайдеров генерации изображений...","noProviders":"Провайдеры генерации изображений отсутствуют","noProvidersDescription":"Настройте плагин с поддержкой генерации изображений","enable":"Включить генерацию изображений","enableDescription":"Разрешить генерацию изображений ИИ в разговорах","configuration":"Конфигурация","model":"Модель","modelDescription":"Выберите модель для генерации изображений","size":"Размер","sizeDescription":"Разрешение генерируемых изображений","quality":"Качество","qualityDescription":"Уровень качества генерируемых изображений","style":"Стиль","styleDescription":"Пресет стиля для генерируемых изображений","availableProviders":"Доступные провайдеры","models":"моделей"},"data":{"title":"Управление данными","export":"Экспорт данных","exportDescription":"Скачайте все ваши данные, включая настройки, сессии и документы.","exportAll":"Экспортировать все данные","import":"Импорт данных","importDescription":"Импортируйте данные из предыдущего экспорта.","importData":"Импортировать данные","importing":"Импорт...","clearSessions":"Очистить сессии","clearSessionsDescription":"Удалить все сессии чата. Это действие нельзя отменить.","clearAll":"Очистить всё","clearing":"Очистка...","importOptions":"Параметры импорта","importOptionsDescription":"Выберите, как обрабатывать существующие данные","skipDuplicates":"Пропускать дубликаты","overwrite":"Перезаписывать существующие","importResults":"Результаты импорта","preferences":"Настройки","imported":"Импортировано","failed":"Ошибка","sessions":"Сессии","importedLabel":"импортировано","skipped":"пропущено","documents":"Документы","errors":"Ошибки"},"about":{"title":"О программе","versionLabel":"Версия","ollama":{"title":"Статус Ollama","version":"Версия","healthy":"Работает","unhealthy":"Не работает"},"stats":{"models":"Модели","sessions":"Сессии"},"features":{"privacy":{"title":"Конфиденциальность прежде всего","description":"Ваши данные остаются на вашем устройстве"},"openSource":{"title":"Открытый исходный код","description":"Бесплатное программное обеспечение с открытым исходным кодом"},"localInference":{"title":"Локальный вывод","description":"Запускайте модели ИИ локально с Ollama"}},"openSourceBy":"Открытый исходный код от {{company}}","links":{"title":"Ссылки","github":"GitHub","githubDescription":"Просмотр исходного кода и участие","website":"Веб-сайт","websiteDescription":"Посетите наш веб-сайт","ollama":"Ollama","ollamaDescription":"Узнайте больше об Ollama","documentation":"Документация","reportIssue":"Сообщить о проблеме","reportIssueDescription":"Отчёты об ошибках и запросы функций","gitlab":"Зеркало GitLab","gitlabDescription":"Самостоятельно размещённый репозиторий GitLab","documentationDescription":"Руководства, учебники и справочник API"},"version":"Версия {{version}}"}}`),models:{title:`Модели`,subtitle:`Загружайте, управляйте и отслеживайте ваши модели Ollama`,installed:`Установленные модели`,available:`Доступные модели`,pull:`Загрузить модель`,pulling:`Загрузка...`,delete:`Удалить модель`,deleting:`Удаление...`,size:`Размер`,modified:`Изменено`,family:`Семейство`,parameters:`Параметры`,quantization:`Квантование`,noModels:`Модели не установлены`,pullFirst:`Загрузите модель, чтобы начать`,noModelsFound:`Модели не найдены`},personas:{title:`Персоны`,create:`Создать персону`,edit:`Редактировать персону`,delete:`Удалить персону`,name:`Имя`,description:`Описание`,systemPrompt:`Системный промпт`,model:`Модель`,avatar:`Аватар`,background:`Фон`,noPersonas:`Персоны не созданы`,createFirst:`Создайте вашу первую персону для настройки опыта общения`},gallery:{title:`Галерея`,subtitle:`Ваша галерея изображений, созданных ИИ`,imageCount:`{{count}} изображений`,generate:`Создать изображение`,generateDescription:`Создавайте изображения с помощью ИИ`,generating:`Создание...`,prompt:`Промпт`,promptPlaceholder:`Опишите изображение, которое хотите создать...`,noImages:`Изображения ещё не созданы`,download:`Скачать`,delete:`Удалить`,regenerate:`Пересоздать`,model:`Модель`,size:`Размер`,quality:`Качество`,created:`Создано`},errors:{generic:`Произошла ошибка`,network:`Сетевая ошибка. Проверьте подключение.`,unauthorized:`У вас нет прав для выполнения этого действия.`,notFound:`Запрошенный ресурс не найден.`,serverError:`Ошибка сервера. Попробуйте позже.`,validation:`Проверьте введённые данные и попробуйте снова.`},keyboard:{title:`Горячие клавиши`,toggleSidebar:`Переключить боковую панель`,openSettings:`Открыть настройки`,toggleDarkMode:`Переключить тёмный режим`,showShortcuts:`Показать горячие клавиши`,closeModals:`Закрыть окна`,groups:{navigation:`Навигация`,settings:`Настройки`,general:`Общие`,chat:`Чат`},actions:{sendMessage:`Отправить сообщение`,newLine:`Новая строка в сообщении`},footer:`Нажмите {{key1}} или {{key2}} для показа справки`,tooltip:`Горячие клавиши`},modelManager:{title:`Модели`,loading:`Загрузка моделей...`,systemStatus:{online:`Ollama онлайн`,offline:`Ollama офлайн`,models:`модель`,models_plural:`моделей`,running:`запущено`,vram:`VRAM`},sections:{pull:`Загрузить новую модель`,library:`Обзор библиотеки`,running:`Запущенные модели`,local:`Локальные модели`,advanced:`Расширенные действия`,huggingface:`HuggingFace Hub`},pull:{placeholder:`Введите название модели (напр., llama3.2:3b, deepseek-r1:14b)`,button:`Загрузить`,cancel:`Отмена`,popular:`Популярные модели:`,browseAll:`Просмотреть все модели на ollama.com`,success:`Модель {{name}} успешно загружена`,cancelled:`Загрузка модели отменена`,failed:`Не удалось загрузить модель`,enterName:`Пожалуйста, введите название модели`,restricted:`Установка моделей в этом экземпляре доступна только администраторам.`},progress:{starting:`Инициализация...`,pulling:`Загрузка модели...`,pullingLayer:`загрузка`,verifying:`Проверка целостности...`,verifyingDigest:`проверка sha256 дайджеста`,writing:`Запись манифеста...`,cleaning:`Очистка...`},library:{available:`доступно`,search:`Поиск моделей...`,noResults:`Модели не найдены по вашим критериям`,installed:`Установлено`,more:`+{{count}} ещё`,refresh:`Обновить библиотеку`},local:{noModels:`Модели ещё не установлены`,pullToStart:`Загрузите модель выше, чтобы начать`,installed:`установлено`,running:`Запущено`,info:`Инфо`,copy:`Копировать`,delete:`Удалить`,deleteConfirm:`Вы уверены, что хотите удалить модель "{{name}}"?`,deleteSuccess:`Модель {{name}} успешно удалена`,deleteFailed:`Не удалось удалить модель`},advanced:{createModel:`Создать модель`,fromModelfile:`Из Modelfile`,copyModel:`Копировать модель`,duplicateExisting:`Дублировать существующую`,testEmbeddings:`Тест встраивания`,generateVectors:`Создать векторы`,healthCheck:`Проверка состояния`,testConnection:`Проверить соединение`,healthy:`Ollama работает нормально!`},modals:{details:{title:`Детали модели`,info:`Информация о модели`,family:`Семейство`,parameters:`Параметры`,quantization:`Квантование`,format:`Формат`,systemPrompt:`Системный промпт`,template:`Шаблон`,license:`Лицензия`,modelfile:`Modelfile`,noDetails:`Детали недоступны`},copy:{title:`Копировать модель`,source:`Исходная модель`,selectModel:`Выберите модель...`,newName:`Новое название модели`,placeholder:`напр., my-custom-model`,copying:`Копирование...`,button:`Копировать модель`,success:`Модель скопирована в {{name}}`,failed:`Не удалось скопировать модель`,enterBoth:`Пожалуйста, введите исходное и целевое названия`},create:{title:`Создать пользовательскую модель`,name:`Название модели`,namePlaceholder:`напр., my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
+ SYSTEM You are a helpful assistant.`,see:`См.`,docs:`Документация Modelfile`,docsLink:`для справки по синтаксису`,creating:`Создание...`,button:`Создать модель`,success:`Модель {{name}} успешно создана`,failed:`Не удалось создать модель`,enterBoth:`Пожалуйста, введите название модели и содержимое Modelfile`},embeddings:{title:`Тест встраивания`,model:`Модель встраивания`,selectModel:`Выберите модель...`,recommended:`Рекомендуется: nomic-embed-text, mxbai-embed-large`,input:`Входной текст`,placeholder:`Введите текст для создания встраивания...`,generating:`Создание...`,button:`Создать встраивание`,result:`Результат ({{count}} измерений)`,success:`Создан {{count}}-мерный вектор встраивания`,failed:`Не удалось создать встраивание`,enterBoth:`Пожалуйста, выберите модель и введите текст`}},huggingface:{browseAll:`Смотреть всё на HuggingFace`,checkingGguf:`Поиск GGUF-файлов...`,noGgufAvailable:`Нет доступных GGUF-файлов для прямой загрузки в Ollama`,ggufFilesCount:`GGUF-файлы ({{count}}) - Загрузить напрямую в Ollama`,noModelsFound:`Модели не найдены`,noResults:`Модели не найдены. Попробуйте изменить поиск или фильтры.`,browseAllLink:`Смотреть всё`,search:`Поиск моделей HuggingFace...`,by:`от`,gated:`Ограниченный доступ`,viewOnHF:`Открыть на HuggingFace`,sortDownloads:`Загрузки`,sortLikes:`Лайки`,sortRecent:`Недавние`,taskTextGeneration:`Генерация текста`,taskTextToSpeech:`Текст в речь`,taskTextToImage:`Текст в изображение`,taskSpeechRecognition:`Распознавание речи`,tasks:{textGen:`Генерация текста`,tts:`Текст в речь`,image:`Текст в изображение`,stt:`Распознавание речи`},sort:{downloads:`Самые загружаемые`,likes:`Самые популярные`,recent:`Недавно обновлённые`}}},personaManager:{title:`Персоны`,subtitle:`Создавайте и управляйте персонами ИИ с пользовательскими личностями, памятью и поведением`,loading:`Загрузка персон...`,createButton:`Создать персону`,importExport:`Импорт/Экспорт`,stats:{title:`Ваши персоны`,count:`Создано {{count}} персона`,count_plural:`Создано {{count}} персон`},empty:{title:`Персон пока нет`,description:`Создайте вашу первую персону для персонализированного взаимодействия с ИИ`,button:`Создать вашу первую персону`},deleteConfirm:`Вы уверены, что хотите удалить "{{name}}"?`,deleteSuccess:`Персона "{{name}}" успешно удалена`,downloadSuccess:`Персона "{{name}}" успешно скачана`,failed:`Не удалось {{action}} персону`},personaForm:{title:{create:`Создать новую персону`,edit:`Редактировать персону`},subtitle:{create:`Создайте новую персону ИИ с пользовательской личностью, системой памяти и адаптивным обучением`,edit:`Настройте вашу персону ИИ с расширенной памятью, адаптивным обучением и интеллектуальными параметрами`},loading:`Загрузка формы...`,saved:`Сохранено`,tabs:{basic:`Основное`,parameters:`Параметры`,memory:`Память и обучение`,advanced:`Расширенное`},basic:{name:`Имя`,namePlaceholder:`Введите имя персоны`,model:`Модель`,selectModel:`Выберите модель`,description:`Описание`,descriptionPlaceholder:`Опишите вашу персону...`,systemPrompt:`Системный промпт`,systemPromptPlaceholder:`Введите системный промпт, определяющий поведение вашей персоны...`,systemPromptHint:`Системный промпт определяет, как ваша персона будет себя вести и отвечать.`},parameters:{temperature:`Температура`,temperatureHint:`Контролирует креативность vs последовательность`,topP:`Top-P`,topPHint:`Контролирует разнообразие ответов`,topK:`Top-K`,topKHint:`Ограничивает словарь до top-k токенов`,contextWindow:`Окно контекста`,contextWindowHint:`Максимальная длина истории разговора`,maxTokens:`Макс. токенов`,maxTokensHint:`Максимальная длина ответа`,repeatPenalty:`Штраф за повторение`,repeatPenaltyHint:`Уменьшает повторяющиеся ответы`},memory:{title:`Система памяти`,subtitle:`Персона запоминает разговоры со временем`,enableHint:`Включите систему памяти, чтобы ваша персона запоминала разговоры и накапливала контекст со временем.`,loading:`Загрузка статуса памяти...`,noData:`Данных памяти пока нет`,memories:`Воспоминания`,mbUsed:`МБ использовано`,lastBackup:`Последний бэкап`,never:`Никогда`,maxMemories:`Максимум воспоминаний`,maxMemoriesHint:`Сколько воспоминаний может хранить эта персона`,retention:`Срок хранения памяти`,retentionHint:`Дней до очистки воспоминаний`,autoCleanup:`Автоочистка старых воспоминаний`,wipeAll:`Очистить всю память`,wipeCannot:`Это нельзя отменить`,wipeButton:`Очистить`,wiping:`Очистка...`,wipeConfirm:`Вы уверены, что хотите очистить всю память? Это нельзя отменить.`,wipeSuccess:`Очищено {{count}} воспоминаний`},learning:{title:`Адаптивное обучение`,subtitle:`Персона развивается на основе взаимодействий`,enableHint:`Включите адаптивное обучение, чтобы ваша персона развивалась и персонализировала ответы на основе ваших взаимодействий.`,speed:`Скорость обучения`,slow:`Медленно`,slowDesc:`Постепенные изменения`,balanced:`Сбалансировано`,balancedDesc:`Умеренный темп`,fast:`Быстро`,fastDesc:`Быстрая адаптация`,autoAdapt:`Автоадаптация к предпочтениям пользователя`,whatLearns:`Что изучает персона:`,conversationTone:`Тон разговора`,responseStyle:`Стиль ответов`,userPreferences:`Предпочтения пользователя`,topicInterests:`Интересующие темы`},advanced:{embeddingModel:`Модель встраивания`,embeddingHint:`Выберите модель для кодирования памяти и семантического поиска. Модели встраивания показаны первыми, затем другие доступные модели.`,noModels:`Модели не найдены`,embeddingModels:`Модели встраивания`,otherModels:`Другие модели`,installHint:`Установите модель встраивания:`,recommended:`Рекомендуется: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`О расширенных настройках`,aboutDescription:`Модель встраивания используется системой памяти для понимания семантического значения и поиска релевантных воспоминаний во время разговоров. Выберите модель, соответствующую вашему сценарию использования и доступным ресурсам.`},actions:{cancel:`Отмена`,save:`Сохранить`,saving:`Сохранение...`,saveClose:`Сохранить и закрыть`,create:`Создать`},success:{created:`Персона создана`,updated:`Персона обновлена`},error:{saveFailed:`Не удалось сохранить`}},personaCard:{enhanced:`Улучшенная`,systemPrompt:`Системный промпт`,memories:`воспоминаний`,use:`Использовать`,editTooltip:`Редактировать персону`,downloadTooltip:`Скачать персону`,backup:`Бэкап`,exportDNA:`Экспорт ДНК`,wipeMemories:`Очистить память`,wipeConfirm:`Вы уверены, что хотите очистить всю память этой персоны? Это действие нельзя отменить.`,wipeSuccess:`Очищено {{count}} воспоминаний`,backupSuccess:`Бэкап персоны успешно скачан`,dnaSuccess:`ДНК персоны успешно экспортирована`,failed:`Не удалось {{action}}`},userManager:{title:`Управление пользователями`,subtitle:`Управление аккаунтами и правами пользователей`,pageDescription:`Управляйте учетными записями пользователей, разрешениями и контролем доступа для вашего экземпляра Libre WebUI.`,loading:`Загрузка пользователей...`,createUser:`Создать пользователя`,search:`Поиск пользователей...`,noUsers:`Пользователи не найдены`,noUsersMatching:`Пользователи по вашему запросу не найдены`,columns:{user:`Пользователь`,email:`Эл. почта`,role:`Роль`,created:`Создан`,actions:`Действия`},roles:{admin:`Администратор`,user:`Пользователь`},noEmail:`Нет эл. почты`,deleteConfirm:`Вы уверены, что хотите удалить пользователя "{{name}}"?`,deleteSuccess:`Пользователь успешно удалён`,deleteFailed:`Не удалось удалить пользователя`,cannotDeleteSelf:`Вы не можете удалить свой аккаунт`,form:{title:{create:`Создать пользователя`,edit:`Редактировать пользователя`},username:`Имя пользователя`,usernamePlaceholder:`Введите имя пользователя`,email:`Эл. почта`,emailPlaceholder:`Введите эл. почту (необязательно)`,password:`Пароль`,passwordPlaceholder:`Введите пароль`,passwordHint:`Оставьте пустым, чтобы сохранить текущий пароль`,role:`Роль`,creating:`Создание...`,updating:`Обновление...`,createButton:`Создать пользователя`,updateButton:`Обновить пользователя`,createSuccess:`Пользователь успешно создан`,updateSuccess:`Пользователь успешно обновлён`,createFailed:`Не удалось создать пользователя`,updateFailed:`Не удалось обновить пользователя`}},chatHistory:{label:`История разговора`,jumpToTurn:`Перейти к реплике {{index}} из {{total}}`},chatMessage:{you:`Вы`,assistant:`Ассистент`,system:`Система`,copy:`Копировать`,copyMessage:`Копировать сообщение`,copied:`Скопировано!`,regenerate:`Пересоздать`,regenerateResponse:`Пересоздать ответ`,edit:`Редактировать`,editSystemMessage:`Редактировать системное сообщение`,saveChanges:`Сохранить изменения`,cancelEditing:`Отменить редактирование`,delete:`Удалить`,deleteConfirm:`Удалить это сообщение?`,branch:`Ветка`,speaking:`Озвучивание...`,speakMessage:`Озвучить сообщение`,stopSpeaking:`Остановить озвучивание`,showMore:`Показать больше`,showLess:`Показать меньше`,thinking:`Думает`,systemMessagePlaceholder:`Введите ваше системное сообщение...`,fullSizeImage:`Изображение в полном размере`,startConversation:`Начать разговор`,startConversationDescription:`Отправьте сообщение, чтобы начать общение с вашим ИИ-ассистентом. Задавайте вопросы, получайте помощь с кодом или ведите обычный разговор.`,scrollToBottom:`Прокрутить вниз`,newMessages:`Новые сообщения`},imageGallery:{title:`Галерея изображений`,noImages:`Изображений пока нет`,noImagesHint:`Создайте первое изображение с помощью панели справа`,delete:`Удалить`,download:`Скачать`,deleteConfirm:`Вы уверены, что хотите удалить это изображение?`,deleteSuccess:`Изображение удалено`,deleteFailed:`Не удалось удалить изображение`,downloadFailed:`Не удалось скачать изображение`,loadMore:`Загрузить ещё ({{current}} из {{total}})`,loadFailed:`Не удалось загрузить галерею`},imageGeneration:{title:`Создать изображение`,prompt:`Промпт`,promptPlaceholder:`Опишите изображение, которое хотите создать...`,model:`Модель`,selectModel:`Выберите модель`,noModels:`Модели генерации изображений недоступны`,configurePlugin:`Настройте плагин с поддержкой генерации изображений`,size:`Размер`,quality:`Качество`,style:`Стиль`,generate:`Создать`,generating:`Создание...`,success:`Изображение успешно создано`,failed:`Не удалось создать изображение`,enterPrompt:`Пожалуйста, введите промпт`,promptTooLong:`Промпт превышает максимальную длину в {{max}} символов`},errorBoundary:{title:`Что-то пошло не так`,description:`Произошла непредвиденная ошибка. Попробуйте обновить страницу.`,tryAgain:`Обновить страницу`,goHome:`На главную`,errorDetails:`Детали ошибки (Разработка)`},documents:{title:`Документы`,upload:`Загрузить документ`,uploading:`Загрузка...`,noDocuments:`Документы не загружены`,uploadHint:`Загрузите документы для использования в разговорах`,delete:`Удалить`,deleteConfirm:`Вы уверены, что хотите удалить этот документ?`,deleteSuccess:`Документ удалён`,deleteFailed:`Не удалось удалить документ`,uploadSuccess:`Документ успешно загружен`,uploadFailed:`Не удалось загрузить документ`,types:`Поддерживаются: PDF, TXT, MD, DOCX`,unsupportedFileType:`Поддерживаются только файлы PDF и TXT`,fileSizeTooLarge:`Размер файла должен быть менее 10 МБ`,uploadSuccessWithName:`Документ "{{name}}" успешно загружен`,removeSuccess:`Документ успешно удалён`,removeFailed:`Не удалось удалить документ`,removeError:`Произошла ошибка при удалении документа`,clickToUpload:`Нажмите для загрузки`,orDragAndDrop:`или перетащите`,fileTypesAndSize:`Файлы PDF или TXT до 10 МБ`,uploadedDocuments:`Загруженные документы`,removeDocument:`Удалить документ`},ttsButton:{speak:`Озвучить`,stop:`Стоп`,speaking:`Озвучивание...`,generateFailed:`Не удалось сгенерировать речь`,playbackFailed:`Ошибка воспроизведения аудио`,stopSpeaking:`Остановить озвучивание`,generatingSpeech:`Генерация речи...`,readAloud:`Читать вслух`},artifacts:{title:`Артефакты`,code:`Код`,preview:`Предпросмотр`,copy:`Копировать код`,copied:`Скопировано!`,download:`Скачать`,expand:`Развернуть`,collapse:`Свернуть`,openInNewTab:`Открыть в новой вкладке`,invalidSvg:`Недопустимое содержимое SVG`,invalidJson:`Недопустимое содержимое JSON`,previewMode:`Режим предпросмотра`,codeMode:`Режим кода`,copyContent:`Копировать содержимое`,openInPanel:`Открыть в панели`,openInNewWindow:`Открыть в новом окне`,created:`Создано`,closePanelEsc:`Закрыть панель (Esc)`,copyButton:`Копировать`,open:`Открыть`,dragEdgeToResize:`Перетащите край для изменения размера`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`},personaImportExport:{title:`Импорт и экспорт персон`,description:`Экспортируйте персоны для обмена или импортируйте персоны от других`,exportPersonas:`Экспорт персон`,importPersonas:`Импорт персон`,noPersonasToExport:`Нет персон для экспорта`,personasAvailable:`Доступно {{count}} персона`,personasAvailable_plural:`Доступно {{count}} персон`,exportAll:`Экспортировать всё`,uploadJsonFile:`Загрузить JSON-файл`,pasteJsonLabel:`Вставить данные JSON`,pasteJsonPlaceholder:`Вставьте данные персоны в формате JSON...`,importing:`Импорт...`,importButton:`Импортировать персону(ы)`,expectedFormat:`Ожидаемый формат JSON:`,exportSuccess:`Персона "{{name}}" успешно экспортирована`,exportFailed:`Не удалось экспортировать персону`,exportAllSuccess:`Все {{count}} персон успешно экспортированы`,exportAllFailed:`Не удалось экспортировать персоны`,pasteJsonData:`Пожалуйста, вставьте данные персоны в формате JSON`,importMultipleSuccess:`Успешно импортировано {{count}} персон`,importMultipleFailed:`Не удалось импортировать {{count}} персон`,importNoneFailed:`Не удалось импортировать ни одну персону`,importSuccess:`Персона успешно импортирована`,importFailed:`Не удалось импортировать персону`},generationStats:{details:`Подробности`,promptTokens:`Токены промпта:`,generatedTokens:`Сгенерированные токены:`,totalTokens:`Всего токенов:`,speed:`Скорость:`,promptEval:`Оценка промпта:`,generation:`Генерация:`,modelLoad:`Загрузка модели:`,totalTime:`Общее время:`,generatedAt:`Сгенерировано в:`},userMenu:{loggedOut:`Вы вышли из системы`,pictureUpdated:`Фото профиля обновлено`,failedUpdateAvatar:`Не удалось обновить аватар`,failedUpdatePicture:`Не удалось обновить фото профиля`,noEmail:`Email не указан`,changePicture:`Изменить фото`,settings:`Настройки`,userManagement:`Управление пользователями`,signOut:`Выйти`,changeProfilePicture:`Изменить фото профиля`},pluginManager:{title:`Менеджер плагинов`,upload:`Загрузить`,addJson:`Добавить JSON`,browseHF:`Обзор HF Hub`,confirmDelete:`Вы уверены, что хотите удалить этот плагин?`,uploading:`Загрузка плагина...`,pasteJson:`Вставьте JSON плагина сюда...`,installPlugin:`Установить плагин`,loading:`Загрузка плагинов...`,noPlugins:`Нет установленных плагинов`,noPluginsDescription:`Загрузите файл плагина или добавьте плагин из JSON.`,active:`Активен`,id:`ID`,endpoint:`Эндпоинт`,activate:`Активировать`,deactivate:`Деактивировать`,activePlugin:`Активный плагин`,activePluginDescription:`Все запросы чата будут направляться через этот плагин`,variables:{title:`Переменные`,save:`Сохранить`,saving:`Сохранение...`,saved:`Переменные сохранены`,saveFailed:`Не удалось сохранить переменные`,resetDefaults:`Сбросить по умолчанию`,reset:`Переменные сброшены`,sensitiveSet:`Значение задано (введите новое для изменения)`}},huggingface:{title:`Браузер моделей HuggingFace`,subtitle:`Просматривайте и выбирайте модели из Hub`,searchPlaceholder:`Поиск моделей...`,filters:`Фильтры`,task:`Задача`,sortBy:`Сортировать по`,noModels:`Модели не найдены`,adjustSearch:`Попробуйте изменить поисковый запрос или фильтры`,gated:`Ограниченный`,selected:`Выбрано`,select:`Выбрать`,refresh:`Обновить`,modelsFound:`моделей найдено`},demoMode:{title:`Демо-режим`,github:`GitHub`},personaBackground:{label:`Фоновое изображение`,uploadBackgroundImage:`Загрузить фоновое изображение`,dragAndDrop:`Перетащите изображение или нажмите для выбора`,chooseImage:`Выбрать изображение`,uploading:`Загрузка...`,enterImageUrl:`Или введите URL изображения`,supportedFormats:`Поддерживает: JPG, PNG, GIF, WebP (макс. 5МБ). Широкие альбомные изображения подходят лучше.`,customBackground:`Пользовательское фоновое изображение`,clickToChange:`Нажмите для изменения или удаления`,removed:`Фон удален`,uploaded:`Фон успешно загружен`,invalidFile:`Пожалуйста, выберите действительный файл изображения`,fileTooLarge:`Размер фонового изображения должен быть менее 5МБ`,readFailed:`Не удалось прочитать файл изображения`,uploadFailed:`Не удалось загрузить фоновое изображение`},modelSelector:{searchInstalled:`Поиск установленных моделей...`,searchOllama:`Поиск в библиотеке Ollama...`,searchHuggingFace:`Поиск на HuggingFace...`,selectModel:`Выбрать модель`,personas:`Персоны`,ollamaModels:`Модели Ollama`,pluginModels:`Модели плагинов`,actions:`Действия`,installed:`Установлено`,use:`Использовать`,pull:`Загрузить`,pullRestricted:`Установка моделей в этом экземпляре доступна только администраторам.`,adminOnlyPull:`Только администраторы`},libreClaw:{title:`Libre Claw`,subtitle:`Запуск локального агента, утверждения, расписания, память, инструменты и использование.`,dashboard:`Панель управления`,connection:{disconnectedTitle:`Демон Libre Claw не подключен`,disconnectedDescription:`Запустите его локально с <command>libre-claw start</command> или установите <env>LIBRE_CLAW_BASE_URL</env> во внутренней среде.`},status:{connected:`Подключено`,disconnected:`Отключено`,activeRuns:`{{count}} активен`,activeRuns_plural:`{{count}} активен`},states:{queued:`В очереди`,running:`Выполняется`,blocked:`Заблокировано`,done:`Готово`,failed:`Не удалось`,cancelled:`Отменено`},startRun:{title:`Запустить выполнение агента`,placeholder:`Попросите Libre Claw проверить репозиторий, исправить ошибку, выполнить проверку, запланировать отчет...`,chatRun:`Бег в чате`,goalMode:`Режим цели`,providerOverride:`Переопределение поставщика`,modelOverride:`Переопределение модели`,run:`Запустить`},modelRoute:{title:`Модельный маршрут`,providerPlaceholder:`поставщик`,modelPlaceholder:`модель`,persistGlobal:`Сохранять глобальную конфигурацию Libre Claw`,saveModel:`Сохранить модель`,theme:`Тема Libre Claw`,saveTheme:`Сохранить тему`},runs:{title:`Запуски`,empty:`Запусков Libre Claw пока нет.`},timeline:{title:`Хронология выполнения`,empty:`Выберите запуск, чтобы просмотреть его события.`,streaming:`Потоковая передача...`,assistantResponse:`Ответ Ассистента`,resultOk:`ок`,resultError:`ошибка`,labels:{userMessage:`Сообщение пользователя`,toolCall:`Вызов инструмента`,toolResult:`Результат инструмента`,approvalRequest:`Запрос на одобрение`,approvalResponse:`Ответ на одобрение`,runStarted:`Запуск начат`,runFinished:`Запуск завершен`,usage:`Использование`,error:`Ошибка`}},approvals:{needed:`Требуется одобрение`,allowOnce:`Разрешить один раз`,alwaysAllowTool:`Всегда разрешать инструмент`,deny:`Отклонить`,toolApprovalRequested:`Требуется одобрение инструмента`},automations:{title:`Автоматизация`,namePlaceholder:`Имя`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Подсказка автоматизации`,create:`Создать`,empty:`Никакой запланированной автоматизации Libre Claw.`,runNow:`Запустить сейчас`,pause:`Пауза`,resume:`Возобновить`,routes:{report:`Отчет`,telegram:`Telegram`},status:{active:`Активный`,paused:`Приостановлено`}},usageFallback:{title:`Использование и резервный вариант`,usage:`Использование`,fallbackRoute:`Резервный маршрут`,noUsage:`Записей об использовании пока нет.`},metrics:{provider:`Поставщик`,model:`Модель`,input:`Ввод`,output:`Выход`,cached:`Кэшированный`,reasoning:`Рассуждение`,cost:`Стоимость`,tool:`Инструмент`,resolution:`Разрешение`,state:`Состояние`,stopReason:`Причина остановки`,tokens:`{{formatted}} жетон`,tokens_plural:`{{formatted}} жетоны`},fallbacks:{tool:`инструмент`,unknown:`неизвестно`,resolved:`решено`,unknownError:`Неизвестная ошибка`},toasts:{loadStatusFailed:`Не удалось загрузить статус Libre Claw.`,enterTask:`Введите задачу на Libre Claw`,runStarted:`Запуск Libre Claw начат`,startRunFailed:`Не удалось запустить Libre Claw`,runCancelled:`Запуск отменен`,cancelRunFailed:`Не удалось отменить запуск`,approved:`Утверждено`,denied:`Отказано`,resolvePermissionFailed:`Не удалось разрешить разрешение`,providerModelRequired:`Требуется поставщик и модель.`,modelUpdated:`Модель Libre Claw обновлена`,updateModelFailed:`Не удалось обновить модель`,themeUpdated:`Тема Libre Claw обновлена`,updateThemeFailed:`Не удалось обновить тему`,automationRequired:`Укажите название автоматизации, расписание и подсказку.`,automationCreated:`Автоматизация создана`,createAutomationFailed:`Не удалось создать автоматизацию`,automationUpdated:`Автоматизация обновлена`,updateAutomationFailed:`Не удалось обновить автоматизацию`}},work:{title:`Работа`,subtitle:`Изолированные рабочие пространства моделей`,tasks:{title:`Задачи`,subtitle:`Постоянные локальные рабочие пространства`,new:`Новая задача`,emptyTitle:`Пока нет рабочих задач`,empty:`После отправки первого сообщения ваши рабочие задачи появятся здесь.`,untitled:`Задача без названия`,actions:`Действия с задачей`,delete:`Удалить задачу`,deleteNamed:`Удалить «{{title}}»`,deleteConfirm:`Удалить «{{title}}» и её рабочее пространство навсегда?`,close:`Закрыть список задач`,open:`Открыть список задач`,rename:`Название задачи`,loading:`Загрузка задачи…`,notFound:`Эта рабочая задача недоступна`,back:`Начать новую задачу`,status:`Статус: {{status}}`},landing:{title:`Начать новую рабочую задачу`,description:`Предоставьте локальной модели или модели настроенного провайдера постоянное изолированное рабочее пространство. Она сможет просматривать файлы, запускать инструменты и продолжить с места остановки, когда вы вернётесь.`,isolated:`Изоляция`,isolatedBody:`У каждой задачи собственный контейнер и собственные файлы.`,durable:`Сохранность`,durableBody:`Вернитесь к разговору и рабочему пространству позже.`,controlled:`Контроль`,controlledBody:`Среда выполнения и файлы задачи остаются изолированными от хоста.`},composer:{placeholder:`Опишите, что вы хотите создать или изменить…`,model:`Рабочая модель`,noModels:`Нет моделей, совместимых с режимом «Работа»`,cancel:`Остановить`,send:`Запустить`,hint:`Каждая задача хранит собственные файлы и историю. Проверяйте результаты модели перед использованием.`,remoteTitle:`Удалённый провайдер`,remoteHint:`Разговор и результаты инструментов отправляются в настроенный сервис. Один автономный запуск может несколько раз обратиться к провайдеру, что может повлечь расходы. Файлы рабочего пространства остаются локальными, если только инструмент не возвращает их содержимое.`,remoteDismiss:`Скрыть`,remoteDismissLabel:`Скрыть уведомление об удалённом провайдере`,remoteDismissFailed:`Не удалось сохранить настройку удалённого провайдера.`,noModelSelected:`Не выбрана модель, совместимая с режимом «Работа».`},conversation:{ready:`Рабочее пространство готово`,empty:`Продолжите задачу ниже. Этот разговор и его файлы остаются привязанными к данному рабочему пространству.`,loadOlder:`Загрузить предыдущие сообщения`},status:{preparing:`Подготовка изолированного рабочего пространства…`,running:`Работа в локальном рабочем пространстве…`},statusLabels:{idle:`Ожидание`,thinking:`Думает`,complete:`Завершено`,needsInput:`Требуется ввод`,error:`Ошибка`},live:{connecting:`Подключение к обновлениям в реальном времени…`,reconnecting:`Повторное подключение к обновлениям в реальном времени…`,unavailable:`Обновления в реальном времени недоступны`,newActivity:`Новая активность`,skillsLoaded:`Навыки рабочего пространства · {{count}}`},runtime:{unavailable:`Среда выполнения недоступна`,ready:`Среда выполнения готова`,readyOllama:`Docker готов`,readyPlugin:`Docker и плагин готовы`,readyHybrid:`Docker и модели готовы`,reason:`Требуется Docker и доступный провайдер модели Ollama или плагина.`},workspace:{label:`Режимы рабочего пространства`,files:`Файлы`,activity:`Активность`,preview:`Предпросмотр`,resize:`Изменить размеры разговора и рабочего пространства`,resizeHint:`Перетащите, чтобы изменить размер. Для точной настройки используйте клавиши со стрелками. Дважды щёлкните или нажмите Enter, чтобы сбросить.`,splitSize:`Разговор {{conversation}}%, рабочее пространство {{workspace}}%`},files:{discard:`Отменить несохранённые изменения файла?`,leaveWithDraft:`Покинуть этот файл? Несохранённое изменение останется в браузере как черновик.`,up:`Родительская папка`,back:`Назад к файлам`,empty:`В этой папке пока нет файлов.`,select:`Выберите файл, чтобы просмотреть и изменить его.`,editorLabel:`Редактор файла: {{path}}`,format:`Форматировать`,formatted:`Код отформатирован.`,formatFailed:`Не удалось отформатировать этот файл.`,formatShortcut:`Форматировать (Shift+Alt+F)`,formatTooLarge:`Форматирование доступно только для файлов до 100 000 символов и 4 000 строк.`,formatUnsupported:`Форматирование недоступно для этого типа файлов.`,saveShortcut:`Сохранить (⌘/Ctrl+S)`,highlightPaused:`Для больших файлов подсветка в реальном времени приостановлена, чтобы редактор работал быстро.`,plainTextLarge:`Обычный текст · большой файл`},activity:{empty:`Здесь появятся команды, операции с файлами и результаты инструментов.`,toolActivity:`Активность инструментов`,details:`Подробности`,kinds:{message:`Сообщение`,toolCall:`Вызов инструмента`,toolResult:`Результат инструмента`,error:`Ошибка`}},preview:{command:`Необязательная команда запуска`,start:`Запустить предпросмотр`,stop:`Остановить предпросмотр`,open:`Открыть`,starting:`Запуск предпросмотра…`,frameTitle:`Предпросмотр рабочего пространства`,failed:`Не удалось запустить предпросмотр. Проверьте Активность и попробуйте другую команду.`,empty:`Запустите приложение в этом рабочем пространстве, чтобы просмотреть его здесь.`},mobile:{surface:`Область задачи`,conversation:`Разговор`,workspace:`Рабочее пространство`},toasts:{runFailed:`Не удалось запустить рабочую задачу.`,updateFailed:`Не удалось обновить эту задачу.`,renameFailed:`Не удалось переименовать эту задачу.`,cancelled:`Запуск рабочей задачи остановлен.`,cancelFailed:`Не удалось остановить запуск рабочей задачи.`,deleteFailed:`Не удалось удалить эту рабочую задачу.`,saveFailed:`Не удалось сохранить этот файл.`,saved:`Файл сохранён.`,previewFailed:`Не удалось запустить предпросмотр.`,previewStopFailed:`Не удалось остановить предпросмотр.`}}};export{e as default};
@@ -0,0 +1,29 @@
1
+ import{_ as e,g as t,h as n,m as r,p as i}from"./router-vendor-BjDI9mRe.js";import{X as a}from"../assets/index-DkShhNBf.js";var o,s,c,l,u,d,f,p=Object.defineProperty,m=(e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})},h={};m(h,{__debug:()=>mo,check:()=>fo,doc:()=>Ea,format:()=>uo,formatWithCursor:()=>lo,getSupportInfo:()=>po,util:()=>ja,version:()=>Aa});var g=(e,t)=>(n,r,...i)=>n|1&&r==null?void 0:(t.call(r)??r[e]).apply(r,i),_=String.prototype.replaceAll??function(e,t){return e.global?this.replace(e,t):this.split(e).join(t)},v=g(`replaceAll`,function(){if(typeof this==`string`)return _}),ee=class{diff(e,t,n={}){let r;typeof n==`function`?(r=n,n={}):`callback`in n&&(r=n.callback);let i=this.castInput(e,n),a=this.castInput(t,n),o=this.removeEmpty(this.tokenize(i,n)),s=this.removeEmpty(this.tokenize(a,n));return this.diffWithOptionsObj(o,s,n,r)}diffWithOptionsObj(e,t,n,r){let i=e=>{if(e=this.postProcess(e,n),r){setTimeout(function(){r(e)},0);return}else return e},a=t.length,o=e.length,s=1,c=a+o;n.maxEditLength!=null&&(c=Math.min(c,n.maxEditLength));let l=n.timeout??1/0,u=Date.now()+l,d=[{oldPos:-1,lastComponent:void 0}],f=this.extractCommon(d[0],t,e,0,n);if(d[0].oldPos+1>=o&&f+1>=a)return i(this.buildValues(d[0].lastComponent,t,e));let p=-1/0,m=1/0,h=()=>{for(let r=Math.max(p,-s);r<=Math.min(m,s);r+=2){let s,c=d[r-1],l=d[r+1];c&&(d[r-1]=void 0);let u=!1;if(l){let e=l.oldPos-r;u=l&&0<=e&&e<a}let h=c&&c.oldPos+1<o;if(!u&&!h){d[r]=void 0;continue}if(s=!h||u&&c.oldPos<l.oldPos?this.addToPath(l,!0,!1,0,n):this.addToPath(c,!1,!0,1,n),f=this.extractCommon(s,t,e,r,n),s.oldPos+1>=o&&f+1>=a)return i(this.buildValues(s.lastComponent,t,e))||!0;d[r]=s,s.oldPos+1>=o&&(m=Math.min(m,r-1)),f+1>=a&&(p=Math.max(p,r+1))}s++};if(r)(function e(){setTimeout(function(){if(s>c||Date.now()>u)return r(void 0);h()||e()},0)})();else for(;s<=c&&Date.now()<=u;){let e=h();if(e)return e}}addToPath(e,t,n,r,i){let a=e.lastComponent;return a&&!i.oneChangePerToken&&a.added===t&&a.removed===n?{oldPos:e.oldPos+r,lastComponent:{count:a.count+1,added:t,removed:n,previousComponent:a.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:t,removed:n,previousComponent:a}}}extractCommon(e,t,n,r,i){let a=t.length,o=n.length,s=e.oldPos,c=s-r,l=0;for(;c+1<a&&s+1<o&&this.equals(n[s+1],t[c+1],i);)c++,s++,l++,i.oneChangePerToken&&(e.lastComponent={count:1,previousComponent:e.lastComponent,added:!1,removed:!1});return l&&!i.oneChangePerToken&&(e.lastComponent={count:l,previousComponent:e.lastComponent,added:!1,removed:!1}),e.oldPos=s,c}equals(e,t,n){return n.comparator?n.comparator(e,t):e===t||!!n.ignoreCase&&e.toLowerCase()===t.toLowerCase()}removeEmpty(e){let t=[];for(let n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t}castInput(e,t){return e}tokenize(e,t){return Array.from(e)}join(e){return e.join(``)}postProcess(e,t){return e}get useLongestToken(){return!1}buildValues(e,t,n){let r=[],i;for(;e;)r.push(e),i=e.previousComponent,delete e.previousComponent,e=i;r.reverse();let a=r.length,o=0,s=0,c=0;for(;o<a;o++){let e=r[o];if(e.removed)e.value=this.join(n.slice(c,c+e.count)),c+=e.count;else{if(!e.added&&this.useLongestToken){let r=t.slice(s,s+e.count);r=r.map(function(e,t){let r=n[c+t];return r.length>e.length?r:e}),e.value=this.join(r)}else e.value=this.join(t.slice(s,s+e.count));s+=e.count,e.added||(c+=e.count)}}return r}},te=new class extends ee{tokenize(e){return e.slice()}join(e){return e}removeEmpty(e){return e}};function ne(e,t,n){return te.diff(e,t,n)}var re=()=>{},ie=`cr`,ae=`crlf`,oe=`lf`,se=`\r`,ce=`\r
2
+ `,le=`
3
+ `,ue=le;function de(e){let t=e.indexOf(se);return t===-1?oe:e.charAt(t+1)===le?ae:ie}function fe(e){return e===ie?se:e===ae?ce:ue}var pe=new Map([[le,/\n/g],[se,/\r/g],[ce,/\r\n/g]]);function me(e,t){let n=pe.get(t);return e.match(n)?.length??0}var he=/\r\n?/g;function ge(e){return v(0,e,he,le)}var _e=Symbol.for(`comments`);function ve(e){return this[e<0?this.length+e:e]}var y=g(`at`,function(){if(Array.isArray(this)||typeof this==`string`)return ve}),b=`string`,x=`array`,S=`cursor`,C=`indent`,w=`align`,T=`trim`,E=`group`,D=`fill`,O=`if-break`,k=`indent-if-break`,A=`line-suffix`,j=`line-suffix-boundary`,M=`line`,N=`label`,P=`break-parent`,ye=new Set([S,C,w,T,E,D,O,k,A,j,M,N,P]);function be(e){let t=e.length;for(;t>0&&(e[t-1]===`\r`||e[t-1]===`
4
+ `);)t--;return t<e.length?e.slice(0,t):e}function xe(e,t,n){if(!e.has(t)){let r=n(t);e.set(t,r)}return e.get(t)}function Se(e){if(typeof e==`string`)return b;if(Array.isArray(e))return x;if(!e)return;let{type:t}=e;if(ye.has(t))return t}var F=Se,Ce=e=>new Intl.ListFormat(`en-US`,{type:`disjunction`}).format(e);function we(e){let t=e===null?`null`:typeof e;if(t!==`string`&&t!==`object`)return`Unexpected doc '${t}',
5
+ Expected it to be 'string' or 'object'.`;if(F(e))throw Error(`doc is valid.`);let n=Object.prototype.toString.call(e);if(n!==`[object Object]`)return`Unexpected doc '${n}'.`;let r=Ce([...ye].map(e=>`'${e}'`));return`Unexpected doc.type '${e.type}'.
6
+ Expected it to be ${r}.`}var I=class extends Error{constructor(e){((...e)=>(super(...e),i(this,`name`,`InvalidDocError`),this))(we(e)),this.doc=e}},Te={};function Ee(e,t,n,r){let i=[e];for(;i.length>0;){let e=i.pop();if(e===Te){n(i.pop());continue}n&&i.push(e,Te);let a=F(e);if(!a)throw new I(e);if(t?.(e)!==!1)switch(a){case x:case D:{let t=a===x?e:e.parts;for(let e=t.length-1;e>=0;--e)i.push(t[e]);break}case O:i.push(e.flatContents,e.breakContents);break;case E:if(r&&e.expandedStates)for(let t=e.expandedStates.length,n=t-1;n>=0;--n)i.push(e.expandedStates[n]);else i.push(e.contents);break;case w:case C:case k:case N:case A:i.push(e.contents);break;case b:case S:case T:case j:case M:case P:break;default:throw new I(e)}}}var De=Ee;function Oe(e,t){if(typeof e==`string`)return t(e);let n=new Map;return r(e);function r(e){return xe(n,e,i)}function i(e){switch(F(e)){case x:return t(e.map(r));case D:return t({...e,parts:e.parts.map(r)});case O:return t({...e,breakContents:r(e.breakContents),flatContents:r(e.flatContents)});case E:{let{expandedStates:n,contents:i}=e;return n?(n=n.map(r),i=n[0]):i=r(i),t({...e,contents:i,expandedStates:n})}case w:case C:case k:case N:case A:return t({...e,contents:r(e.contents)});case b:case S:case T:case j:case M:case P:return t(e);default:throw new I(e)}}}function ke(e,t,n){let r=n,i=!1;function a(e){if(i)return!1;let n=t(e);n!==void 0&&(i=!0,r=n)}return De(e,a),r}function Ae(e){if(e.type===E&&e.break||e.type===M&&e.hard||e.type===P)return!0}function je(e){return ke(e,Ae,!1)}function Me(e){if(e.length>0){let t=y(0,e,-1);!t.expandedStates&&!t.break&&(t.break=`propagated`)}return null}function Ne(e){let t=new Set,n=[];function r(e){if(e.type===P&&Me(n),e.type===E){if(n.push(e),t.has(e))return!1;t.add(e)}}function i(e){e.type===E&&n.pop().break&&Me(n)}De(e,r,i,!0)}function Pe(e){return e.type===M&&!e.hard?e.soft?``:` `:e.type===O?e.flatContents:e}function Fe(e){return Oe(e,Pe)}function Ie(e){for(e=[...e];e.length>=2&&y(0,e,-2).type===M&&y(0,e,-1).type===P;)e.length-=2;if(e.length>0){let t=Le(y(0,e,-1));e[e.length-1]=t}return e}function Le(e){switch(F(e)){case C:case k:case E:case A:case N:{let t=Le(e.contents);return{...e,contents:t}}case O:return{...e,breakContents:Le(e.breakContents),flatContents:Le(e.flatContents)};case D:return{...e,parts:Ie(e.parts)};case x:return Ie(e);case b:return be(e);case w:case S:case T:case j:case M:case P:break;default:throw new I(e)}return e}function Re(e){return Le(Be(e))}function ze(e){switch(F(e)){case D:{let{parts:t}=e;if(t.every(e=>e===``))return``;if(t.length===1)return t[0];break}case E:if(!e.contents&&!e.id&&!e.break&&!e.expandedStates)return``;if(e.contents.type===E&&e.contents.id===e.id&&e.contents.break===e.break&&e.contents.expandedStates===e.expandedStates)return e.contents;break;case w:case C:case k:case A:if(!e.contents)return``;break;case O:if(!e.flatContents&&!e.breakContents)return``;break;case x:{let t=[];for(let n of e){if(!n)continue;let[e,...r]=Array.isArray(n)?n:[n];typeof e==`string`&&typeof y(0,t,-1)==`string`?t[t.length-1]+=e:t.push(e),t.push(...r)}return t.length===0?``:t.length===1?t[0]:t}case b:case S:case T:case j:case M:case N:case P:break;default:throw new I(e)}return e}function Be(e){return Oe(e,e=>ze(e))}function Ve(e,t=dt){return Oe(e,e=>typeof e==`string`?at(t,e.split(`
7
+ `)):e)}function He(e){if(e.type===M)return!0}function Ue(e){return ke(e,He,!1)}function We(e,t){return e.type===N?{...e,contents:t(e.contents)}:t(e)}var L=re,Ge=re,Ke=re,qe=re;function Je(e){return L(e),{type:C,contents:e}}function R(e,t){return qe(e),L(t),{type:w,contents:t,n:e}}function Ye(e){return R(-1/0,e)}function Xe(e){return R({type:`root`},e)}function Ze(e){return R(-1,e)}function Qe(e,t,n){L(e);let r=e;if(t>0){for(let e=0;e<Math.floor(t/n);++e)r=Je(r);r=R(t%n,r),r=R(-1/0,r)}return r}var $e={type:P},z={type:S};function et(e){return Ke(e),{type:D,parts:e}}function tt(e,t={}){return L(e),Ge(t.expandedStates,!0),{type:E,id:t.id,contents:e,break:!!t.shouldBreak,expandedStates:t.expandedStates}}function nt(e,t){return tt(e[0],{...t,expandedStates:e})}function rt(e,t=``,n={}){return L(e),t!==``&&L(t),{type:O,breakContents:e,flatContents:t,groupId:n.groupId}}function it(e,t){return L(e),{type:k,contents:e,groupId:t.groupId,negate:t.negate}}function at(e,t){L(e),Ge(t);let n=[];for(let r=0;r<t.length;r++)r!==0&&n.push(e),n.push(t[r]);return n}function ot(e,t){return L(t),e?{type:N,label:e,contents:t}:t}var st={type:M},ct={type:M,soft:!0},lt={type:M,hard:!0},B=[lt,$e],ut={type:M,hard:!0,literal:!0},dt=[ut,$e];function ft(e){return L(e),{type:A,contents:e}}var pt={type:j},mt={type:T};function V(e){if(!e)return``;if(Array.isArray(e)){let t=[];for(let n of e)if(Array.isArray(n))t.push(...V(n));else{let e=V(n);e!==``&&t.push(e)}return t}return e.type===O?{...e,breakContents:V(e.breakContents),flatContents:V(e.flatContents)}:e.type===E?{...e,contents:V(e.contents),expandedStates:e.expandedStates?.map(V)}:e.type===D?{type:`fill`,parts:e.parts.map(V)}:e.contents?{...e,contents:V(e.contents)}:e}function ht(e){let t=Object.create(null),n=new Set;return r(V(e));function r(e,t,n){if(typeof e==`string`)return JSON.stringify(e);if(Array.isArray(e)){let t=e.map(r).filter(Boolean);return t.length===1?t[0]:`[${t.join(`, `)}]`}if(e.type===M){let r=n?.[t+1]?.type===P;return e.literal?r?`literalline`:`literallineWithoutBreakParent`:e.hard?r?`hardline`:`hardlineWithoutBreakParent`:e.soft?`softline`:`line`}if(e.type===P)return n?.[t-1]?.type===M&&n[t-1].hard?void 0:`breakParent`;if(e.type===T)return`trim`;if(e.type===C)return`indent(`+r(e.contents)+`)`;if(e.type===w)return e.n===-1/0?`dedentToRoot(`+r(e.contents)+`)`:e.n<0?`dedent(`+r(e.contents)+`)`:e.n.type===`root`?`markAsRoot(`+r(e.contents)+`)`:`align(`+JSON.stringify(e.n)+`, `+r(e.contents)+`)`;if(e.type===O)return`ifBreak(`+r(e.breakContents)+(e.flatContents?`, `+r(e.flatContents):``)+(e.groupId?(e.flatContents?``:`, ""`)+`, { groupId: ${i(e.groupId)} }`:``)+`)`;if(e.type===k){let t=[];e.negate&&t.push(`negate: true`),e.groupId&&t.push(`groupId: ${i(e.groupId)}`);let n=t.length>0?`, { ${t.join(`, `)} }`:``;return`indentIfBreak(${r(e.contents)}${n})`}if(e.type===E){let t=[];e.break&&e.break!==`propagated`&&t.push(`shouldBreak: true`),e.id&&t.push(`id: ${i(e.id)}`);let n=t.length>0?`, { ${t.join(`, `)} }`:``;return e.expandedStates?`conditionalGroup([${e.expandedStates.map(e=>r(e)).join(`,`)}]${n})`:`group(${r(e.contents)}${n})`}if(e.type===D)return`fill([${e.parts.map(e=>r(e)).join(`, `)}])`;if(e.type===A)return`lineSuffix(`+r(e.contents)+`)`;if(e.type===j)return`lineSuffixBoundary`;if(e.type===N)return`label(${JSON.stringify(e.label)}, ${r(e.contents)})`;if(e.type===S)return`cursor`;throw Error(`Unknown doc type `+e.type)}function i(e){if(typeof e!=`symbol`)return JSON.stringify(String(e));if(e in t)return t[e];let r=e.description||`symbol`;for(let i=0;;i++){let a=r+(i>0?` #${i}`:``);if(!n.has(a))return n.add(a),t[e]=`Symbol.for(${JSON.stringify(a)})`}}}var gt=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g,_t=12288,vt=65510,yt=[12288,12288,65281,65376,65504,65510],bt=4352,xt=262141,St=[4352,4447,8986,8987,9001,9002,9193,9196,9200,9200,9203,9203,9725,9726,9748,9749,9776,9783,9800,9811,9855,9855,9866,9871,9875,9875,9889,9889,9898,9899,9917,9918,9924,9925,9934,9934,9940,9940,9962,9962,9970,9971,9973,9973,9978,9978,9981,9981,9989,9989,9994,9995,10024,10024,10060,10060,10062,10062,10067,10069,10071,10071,10133,10135,10160,10160,10175,10175,11035,11036,11088,11088,11093,11093,11904,11929,11931,12019,12032,12245,12272,12287,12289,12350,12353,12438,12441,12543,12549,12591,12593,12686,12688,12773,12783,12830,12832,12871,12880,42124,42128,42182,43360,43388,44032,55203,63744,64255,65040,65049,65072,65106,65108,65126,65128,65131,94176,94180,94192,94198,94208,101589,101631,101662,101760,101874,110576,110579,110581,110587,110589,110590,110592,110882,110898,110898,110928,110930,110933,110933,110948,110951,110960,111355,119552,119638,119648,119670,126980,126980,127183,127183,127374,127374,127377,127386,127488,127490,127504,127547,127552,127560,127568,127569,127584,127589,127744,127776,127789,127797,127799,127868,127870,127891,127904,127946,127951,127955,127968,127984,127988,127988,127992,128062,128064,128064,128066,128252,128255,128317,128331,128334,128336,128359,128378,128378,128405,128406,128420,128420,128507,128591,128640,128709,128716,128716,128720,128722,128725,128728,128732,128735,128747,128748,128756,128764,128992,129003,129008,129008,129292,129338,129340,129349,129351,129535,129648,129660,129664,129674,129678,129734,129736,129736,129741,129756,129759,129770,129775,129784,131072,196605,196608,262141],Ct=(e,t)=>{let n=0,r=Math.floor(e.length/2)-1;for(;n<=r;){let i=Math.floor((n+r)/2),a=i*2;if(t<e[a])r=i-1;else if(t>e[a+1])n=i+1;else return!0}return!1},wt=19968,[Tt,Et]=Dt(St);function Dt(e){let t=e[0],n=e[1];for(let r=0;r<e.length;r+=2){let i=e[r],a=e[r+1];if(wt>=i&&wt<=a)return[i,a];a-i>n-t&&(t=i,n=a)}return[t,n]}var Ot=e=>e<_t||e>vt?!1:Ct(yt,e),kt=e=>e>=Tt&&e<=Et?!0:e<bt||e>xt?!1:Ct(St,e),At=/^(?:[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u2764\u27A1\u2934\u2935\u2B05-\u2B07]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF3\uDFF5\uDFF7]|\uD83D[\uDC3F\uDC41\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])$/,jt=e=>At.test(e),Mt=/[^\x20-\x7F]/;function Nt(e){if(!e)return 0;if(!Mt.test(e))return e.length;let t=0;e=e.replace(gt(),e=>(t+=jt(e)?1:2,``));for(let n of e){let e=n.codePointAt(0);e<=31||e>=127&&e<=159||e>=768&&e<=879||e>=65024&&e<=65039||(t+=Ot(e)||kt(e)?2:1)}return t}var Pt=Nt,Ft={type:0},It={type:1},Lt={value:``,length:0,queue:[],get root(){return Lt}};function Rt(e,t,n){let r=t.type===1?e.queue.slice(0,-1):[...e.queue,t],i=``,a=0,o=0,s=0;for(let e of r)switch(e.type){case 0:u(),n.useTabs?c(1):l(n.tabWidth);break;case 3:{let{string:t}=e;u(),i+=t,a+=t.length;break}case 2:{let{width:t}=e;o+=1,s+=t;break}default:throw Error(`Unexpected indent comment '${e.type}'.`)}return f(),{...e,value:i,length:a,queue:r};function c(e){i+=` `.repeat(e),a+=n.tabWidth*e}function l(e){i+=` `.repeat(e),a+=e}function u(){n.useTabs?d():f()}function d(){o>0&&c(o),p()}function f(){s>0&&l(s),p()}function p(){o=0,s=0}}function zt(e,t,n){if(!t)return e;if(t.type===`root`)return{...e,root:e};if(t===-1/0)return e.root;let r;return r=typeof t==`number`?t<0?It:{type:2,width:t}:{type:3,string:t},Rt(e,r,n)}function Bt(e,t){return Rt(e,Ft,t)}function Vt(e){let t=0;for(let n=e.length-1;n>=0;n--){let r=e[n];if(r===` `||r===` `)t++;else break}return t}function Ht(e){let t=Vt(e);return{text:t===0?e:e.slice(0,e.length-t),count:t}}var Ut=(o=new WeakMap,s=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakMap,d=new WeakSet,class{constructor(){a(this,d),e(this,o,[]),e(this,s,``),e(this,c,0),e(this,l,[]),e(this,u,[])}markPosition(){if(n(l,this).length+n(u,this).length>=2)throw Error(`There are too many 'cursor' in doc.`);n(u,this).push(n(c,this)+n(s,this).length)}write(e){r(s,this,n(s,this)+e)}trim(){let{text:e,count:i}=Ht(n(s,this));return r(s,this,e),t(d,this,Wt).call(this),i}finish(){return t(d,this,Wt).call(this),{text:n(o,this).join(``),positions:n(l,this)}}});function Wt(){let e=n(s,this);e!==``&&(n(o,this).push(e),r(c,this,n(c,this)+e.length),r(s,this,``));for(let e of n(u,this))n(l,this).push(Math.min(e,n(c,this)));n(u,this).length=0}var H=Symbol(`MODE_BREAK`),U=Symbol(`MODE_FLAT`),Gt=Symbol(`DOC_FILL_PRINTED_LENGTH`);function Kt(e,t,n,r,i,a){if(n===1/0)return!0;let o=t.length,s=!1,c=[e],l=``;for(;n>=0;){if(c.length===0){if(o===0)return!0;c.push(t[--o]);continue}let{mode:e,doc:u}=c.pop(),d=F(u);switch(d){case b:u&&(s&&(l+=` `,--n,s=!1),l+=u,n-=Pt(u));break;case x:case D:{let t=d===x?u:u.parts,n=u[Gt]??0;for(let r=t.length-1;r>=n;r--)c.push({mode:e,doc:t[r]});break}case C:case w:case k:case N:c.push({mode:e,doc:u.contents});break;case T:{let{text:e,count:t}=Ht(l);l=e,n+=t;break}case E:{if(a&&u.break)return!1;let t=u.break?H:e,n=u.expandedStates&&t===H?y(0,u.expandedStates,-1):u.contents;c.push({mode:t,doc:n});break}case O:{let t=(u.groupId?i[u.groupId]||U:e)===H?u.breakContents:u.flatContents;t&&c.push({mode:e,doc:t});break}case M:if(e===H||u.hard)return!0;u.soft||(s=!0);break;case A:r=!0;break;case j:if(r)return!1;break}}return!1}function qt(e,t){let n=Object.create(null),r=t.printWidth,i=fe(t.endOfLine),a=0,o=[{indent:Lt,mode:H,doc:e}],s=!1,c=[],l=new Ut;for(Ne(e);o.length>0;){let{indent:e,mode:u,doc:d}=o.pop();switch(F(d)){case b:{let e=i===`
8
+ `?d:v(0,d,`
9
+ `,i);e&&(l.write(e),o.length>0&&(a+=Pt(e)));break}case x:for(let t=d.length-1;t>=0;t--)o.push({indent:e,mode:u,doc:d[t]});break;case S:l.markPosition();break;case C:o.push({indent:Bt(e,t),mode:u,doc:d.contents});break;case w:o.push({indent:zt(e,d.n,t),mode:u,doc:d.contents});break;case T:a-=l.trim();break;case E:{let t=(function(){if(u===U&&!s)return{indent:e,mode:d.break?H:U,doc:d.contents};s=!1;let t=r-a,i=c.length>0,l={indent:e,mode:U,doc:d.contents};if(!d.break&&Kt(l,o,t,i,n))return l;if(!d.expandedStates)return{indent:e,mode:H,doc:d.contents};if(!d.break)for(let r=1;r<d.expandedStates.length-1;r++){let a={indent:e,mode:U,doc:d.expandedStates[r]};if(Kt(a,o,t,i,n))return a}return{indent:e,mode:H,doc:y(0,d.expandedStates,-1)}})();o.push(t),d.id&&(n[d.id]=t.mode);break}case D:{let t=r-a,i=d[Gt]??0,{parts:s}=d,l=s.length-i;if(l===0)break;let f=s[i+0],p=s[i+1],m={indent:e,mode:U,doc:f},h={indent:e,mode:H,doc:f},g=Kt(m,[],t,c.length>0,n,!0);if(l===1){g?o.push(m):o.push(h);break}let _={indent:e,mode:U,doc:p},v={indent:e,mode:H,doc:p};if(l===2){g?o.push(_,m):o.push(v,h);break}let ee=s[i+2],te={indent:e,mode:u,doc:{...d,[Gt]:i+2}},ne=Kt({indent:e,mode:U,doc:[f,p,ee]},[],t,c.length>0,n,!0);o.push(te),ne?o.push(_,m):g?o.push(v,m):o.push(v,h);break}case O:case k:{let t=d.groupId?n[d.groupId]:u;if(t===H){let t=d.type===O?d.breakContents:d.negate?d.contents:Je(d.contents);t&&o.push({indent:e,mode:u,doc:t})}if(t===U){let t=d.type===O?d.flatContents:d.negate?Je(d.contents):d.contents;t&&o.push({indent:e,mode:u,doc:t})}break}case A:c.push({indent:e,mode:u,doc:d.contents});break;case j:c.length>0&&o.push({indent:e,mode:u,doc:lt});break;case M:switch(u){case U:if(!d.hard){d.soft||(l.write(` `),a+=1);break}s=!0;case H:if(c.length>0){o.push({indent:e,mode:u,doc:d},...c.reverse()),c.length=0;break}d.literal?(l.write(i),a=0,e.root&&(e.root.value&&l.write(e.root.value),a=e.root.length)):(l.trim(),l.write(i+e.value),a=e.length);break}break;case N:o.push({indent:e,mode:u,doc:d.contents});break;case P:break;default:throw new I(d)}o.length===0&&c.length>0&&(o.push(...c.reverse()),c.length=0)}let{text:u,positions:d}=l.finish();if(d.length!==2)return{formatted:u};let[f,p]=d;return{formatted:u,cursorNodeStart:f,cursorNodeText:u.slice(f,p)}}function Jt(e,t,n=0){let r=0;for(let i=n;i<e.length;++i)e[i]===` `?r=r+t-r%t:r++;return r}var Yt=Jt,Xt=(f=new WeakSet,class{constructor(e){a(this,f),this.stack=[e]}get key(){let{stack:e,siblings:t}=this;return y(0,e,t===null?-2:-4)??null}get index(){return this.siblings===null?null:y(0,this.stack,-2)}get node(){return y(0,this.stack,-1)}get parent(){return this.getNode(1)}get grandparent(){return this.getNode(2)}get isInArray(){return this.siblings!==null}get siblings(){let{stack:e}=this,t=y(0,e,-3);return Array.isArray(t)?t:null}get next(){let{siblings:e}=this;return e===null?null:e[this.index+1]}get previous(){let{siblings:e}=this;return e===null?null:e[this.index-1]}get isFirst(){return this.index===0}get isLast(){let{siblings:e,index:t}=this;return e!==null&&t===e.length-1}get isRoot(){return this.stack.length===1}get root(){return this.stack[0]}get ancestors(){return[...t(f,this,Qt).call(this)]}getName(){let{stack:e}=this,{length:t}=e;return t>1?y(0,e,-2):null}getValue(){return y(0,this.stack,-1)}getNode(e=0){let n=t(f,this,Zt).call(this,e);return n===-1?null:this.stack[n]}getParentNode(e=0){return this.getNode(e+1)}call(e,...t){let{stack:n}=this,{length:r}=n,i=y(0,n,-1);for(let e of t)i=i?.[e],n.push(e,i);try{return e(this)}finally{n.length=r}}callParent(e,n=0){let r=t(f,this,Zt).call(this,n+1),i=this.stack.splice(r+1);try{return e(this)}finally{this.stack.push(...i)}}each(e,...t){let{stack:n}=this,{length:r}=n,i=y(0,n,-1);for(let e of t)i=i[e],n.push(e,i);try{for(let t=0;t<i.length;++t)n.push(t,i[t]),e(this,t,i),n.length-=2}finally{n.length=r}}map(e,...t){let n=[];return this.each((t,r,i)=>{n[r]=e(t,r,i)},...t),n}match(...e){let t=this.stack.length-1,n=null,r=this.stack[t--];for(let i of e){if(r===void 0)return!1;let e=null;if(typeof n==`number`&&(e=n,n=this.stack[t--],r=this.stack[t--]),i&&!i(r,n,e))return!1;n=this.stack[t--],r=this.stack[t--]}return!0}findAncestor(e){for(let n of t(f,this,Qt).call(this))if(e(n))return n}hasAncestor(e){for(let n of t(f,this,Qt).call(this))if(e(n))return!0;return!1}});function Zt(e){let{stack:t}=this;for(let n=t.length-1;n>=0;n-=2)if(!Array.isArray(t[n])&&--e<0)return n;return-1}function*Qt(){let{stack:e}=this;for(let t=e.length-3;t>=0;t-=2){let n=e[t];Array.isArray(n)||(yield n)}}function $t(e){return Array.isArray(e)&&e.length>0}var en=$t;function tn(e){return typeof e==`object`&&!!e}var nn=tn;function W(e){return(t,n,r)=>{if(n===!1)return!1;let i=!!r?.backwards,{length:a}=t,o=n;for(;o>=0&&o<a;){let n=t.charAt(o);if(e instanceof RegExp){if(!e.test(n))return o}else if(!e.includes(n))return o;i?o--:o++}return o===-1||o===a?o:!1}}var rn=W(/\s/),G=W(` `),an=W(`,; `),on=W(/[^\n\r]/),sn=e=>e===`
10
+ `||e===`\r`||e===`\u2028`||e===`\u2029`;function cn(e,t,n){if(t===!1)return!1;let r=!!n?.backwards,i=e.charAt(t);if(r){if(e.charAt(t-1)===`\r`&&i===`
11
+ `)return t-2;if(sn(i))return t-1}else{if(i===`\r`&&e.charAt(t+1)===`
12
+ `)return t+2;if(sn(i))return t+1}return t}var K=cn;function ln(e,t,n={}){let r=G(e,n.backwards?t-1:t,n);return r!==K(e,r,n)}var q=ln;function*un(e,t){let{getVisitorKeys:n,filter:r=()=>!0}=t,i=e=>nn(e)&&r(e);for(let t of n(e)){let n=e[t];if(Array.isArray(n))for(let e of n)i(e)&&(yield e);else i(n)&&(yield n)}}function*dn(e,t){let n=[e];for(let e=0;e<n.length;e++){let r=n[e];for(let e of un(r,t))yield e,n.push(e)}}function fn(e,t){return un(e,t).next().done}function pn(e,t,n){let{filter:r}=n;if(!r)return[];let i,a=(n.getChildren?.(e,n)??[...un(e,{getVisitorKeys:n.getVisitorKeys})]).flatMap(a=>(i??(i=[e,...t]),r(a,i)?[a]:mn(a,i,n))),{locStart:o,locEnd:s}=n;return a.sort((e,t)=>o(e)-o(t)||s(e)-s(t)),a}function mn(e,t,n){return xe(n.cache,e,e=>pn(e,t,n))}var hn=mn;function gn(e){let t=e.type||e.kind||`(unknown type)`,n=String(e.name||e.id&&(typeof e.id==`object`?e.id.name:e.id)||e.key&&(typeof e.key==`object`?e.key.name:e.key)||e.value&&(typeof e.value==`object`?``:String(e.value))||e.operator||``);return n.length>20&&(n=n.slice(0,19)+`…`),t+(n?` `+n:``)}function _n(e,t){(e.comments??(e.comments=[])).push(t),t.printed=!1,t.nodeDescription=gn(e)}function vn(e,t){t.leading=!0,t.trailing=!1,_n(e,t)}function yn(e,t,n){t.leading=!1,t.trailing=!1,n&&(t.marker=n),_n(e,t)}function bn(e,t){t.leading=!1,t.trailing=!0,_n(e,t)}var xn=new WeakMap;function Sn(e,t,n,r,i=[]){let{locStart:a,locEnd:o}=n,s=a(t),c=o(t),l=hn(e,i,{cache:xn,locStart:a,locEnd:o,getVisitorKeys:n.getVisitorKeys,filter:n.printer.canAttachComment,getChildren:n.printer.getCommentChildNodes}),u,d,f=0,p=l.length;for(;f<p;){let e=f+p>>1,r=l[e],m=a(r),h=o(r);if(m<=s&&c<=h)return Sn(r,t,n,r,[r,...i]);if(h<=s){u=r,f=e+1;continue}if(c<=m){d=r,p=e;continue}throw Error(`Comment location overlaps with node location`)}if(r?.type===`TemplateLiteral`){let{quasis:e}=r,i=kn(e,t,n);u&&kn(e,u,n)!==i&&(u=null),d&&kn(e,d,n)!==i&&(d=null)}return{enclosingNode:r,precedingNode:u,followingNode:d}}var Cn=()=>!1;function wn(e,t){let{comments:n}=e;if(delete e.comments,!en(n)||!t.printer.canAttachComment)return;let r=[],{printer:{features:{experimental_avoidAstMutation:i},handleComments:a={}},originalText:o}=t,{ownLine:s=Cn,endOfLine:c=Cn,remaining:l=Cn}=a,u=n.map((r,i)=>({...Sn(e,r,t),comment:r,text:o,options:t,ast:e,isLastComment:n.length-1===i,placement:void 0})),d=!i;for(let[e,t]of u.entries()){let{comment:n,precedingNode:a,enclosingNode:o,followingNode:f,text:p,options:m,ast:h,isLastComment:g}=t,_=En(p,m,u,e)?`ownLine`:Dn(p,m,u,e)?`endOfLine`:`remaining`,v;if(i?(t.placement=_,v=[t]):v=[n,p,m,h,g],d&&(n.placement=_,n.enclosingNode=o,n.precedingNode=a,n.followingNode=f),_===`ownLine`)s(...v)||(f?vn(f,n):a?bn(a,n):yn(o||h,n));else if(_===`endOfLine`)c(...v)||(a?bn(a,n):f?vn(f,n):yn(o||h,n));else if(!l(...v))if(a&&f){let e=r.length;e>0&&r[e-1].followingNode!==f&&On(r,m),r.push(t)}else a?bn(a,n):f?vn(f,n):yn(o||h,n)}if(On(r,t),d)for(let e of n)delete e.precedingNode,delete e.enclosingNode,delete e.followingNode,delete e.placement}var Tn=e=>!/[\S\n\u2028\u2029]/.test(e);function En(e,t,n,r){let{comment:i,precedingNode:a}=n[r],{locStart:o,locEnd:s}=t,c=o(i);if(a)for(let t=r-1;t>=0;t--){let{comment:r,precedingNode:i}=n[t];if(i!==a||!Tn(e.slice(s(r),c)))break;c=o(r)}return q(e,c,{backwards:!0})}function Dn(e,t,n,r){let{comment:i,followingNode:a}=n[r],{locStart:o,locEnd:s}=t,c=s(i);if(a)for(let t=r+1;t<n.length;t++){let{comment:r,followingNode:i}=n[t];if(i!==a||!Tn(e.slice(c,o(r))))break;c=s(r)}return q(e,c)}function On(e,t){let n=e.length;if(n===0)return;let{precedingNode:r,followingNode:i}=e[0],a=t.locStart(i),o;for(o=n;o>0;--o){let{comment:n,precedingNode:r,followingNode:i}=e[o-1],s=t.originalText.slice(t.locEnd(n),a);if(t.printer.isGap?.(s,t)??/^[\s(]*$/.test(s))a=t.locStart(n);else break}for(let[t,{comment:n}]of e.entries())t<o?bn(r,n):vn(i,n);for(let e of[r,i])e.comments&&e.comments.length>1&&e.comments.sort((e,n)=>t.locStart(e)-t.locStart(n));e.length=0}function kn(e,t,n){let r=n.locStart(t)-1;for(let t=1;t<e.length;++t)if(r<n.locStart(e[t]))return t-1;return 0}function An(e,t){let n=t-1;n=G(e,n,{backwards:!0}),n=K(e,n,{backwards:!0}),n=G(e,n,{backwards:!0});let r=K(e,n,{backwards:!0});return n!==r}var jn=An,Mn=()=>!0;function Nn(e,t){let n=e.node;return n.printed=!0,t.printer.printComment(e,t)}function Pn(e,t){let n=e.node,r=[Nn(e,t)],{printer:i,originalText:a,locStart:o,locEnd:s}=t;if(i.isBlockComment?.(n)){let e=` `;q(a,s(n))&&(e=q(a,o(n),{backwards:!0})?B:st),r.push(e)}else r.push(B);let c=K(a,G(a,s(n)));return c!==!1&&q(a,c)&&r.push(B),r}function Fn(e,t,n){let r=e.node,i=Nn(e,t),{printer:a,originalText:o,locStart:s}=t,c=a.isBlockComment?.(r);return n?.hasLineSuffix&&!n?.isBlock||q(o,s(r),{backwards:!0})?{doc:ft([B,jn(o,s(r))?B:``,i]),isBlock:c,hasLineSuffix:!0}:!c||n?.hasLineSuffix?{doc:[ft([` `,i]),$e],isBlock:c,hasLineSuffix:!0}:{doc:[` `,i],isBlock:c,hasLineSuffix:!1}}function In(e,t,n){let r=t[Symbol.for(`printedComments`)],i=n?.filter??Mn,a=new Set(e.node?.comments?.filter(e=>!r?.has(e)&&e.leading&&i(e)));return a.size===0?``:e.map(({node:n})=>a.has(n)?Pn(e,t):``,`comments`).filter(Boolean)}function Ln(e,t,n){let r=e.node?.comments,i=new Set(r?.filter(e=>e.trailing)),a=t[Symbol.for(`printedComments`)],o=n?.filter??Mn,s=new Set(r?.filter(e=>i.has(e)&&!a?.has(e)&&o(e)));if(s.size===0)return``;let c=[],l;return e.each(({node:n})=>{i.has(n)&&(l=Fn(e,t,l),s.has(n)&&c.push(l.doc))},`comments`),c}function Rn(e,t,n,r){let i=In(e,n,r),a=Ln(e,n,r);return i||a?We(t,e=>[i,e,a]):t}function zn(e){let{[_e]:t,[Symbol.for(`printedComments`)]:n}=e;for(let e of t){if(!e.printed&&!n.has(e))throw Error(`Comment "`+e.value.trim()+`" was not printed. Please report this error!`);delete e.printed}}var Bn=()=>re,Vn=class extends Error{constructor(...e){super(...e),i(this,`name`,`ConfigError`)}},Hn=class extends Error{constructor(...e){super(...e),i(this,`name`,`UndefinedParserError`)}},Un=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Wn={checkIgnorePragma:{category:`Special`,type:`boolean`,default:!1,description:`Check whether the file's first docblock comment contains '@noprettier' or '@noformat' to determine if it should be formatted.`,cliCategory:`Other`},cursorOffset:{category:`Special`,type:`int`,default:-1,range:{start:-1,end:1/0,step:1},description:`Print (to stderr) where a cursor at the given position would move to after formatting.`,cliCategory:`Editor`},endOfLine:{category:`Global`,type:`choice`,default:`lf`,description:`Which end of line characters to apply.`,choices:[{value:`lf`,description:`Line Feed only (\\n), common on Linux and macOS as well as inside git repos`},{value:`crlf`,description:`Carriage Return + Line Feed characters (\\r\\n), common on Windows`},{value:`cr`,description:`Carriage Return character only (\\r), used very rarely`},{value:`auto`,description:`Maintain existing
13
+ (mixed values within one file are normalised by looking at what's used after the first line)`}]},filepath:{category:`Special`,type:`path`,description:`Specify the input filepath. This will be used to do parser inference.`,cliName:`stdin-filepath`,cliCategory:`Other`,cliDescription:`Path to the file to pretend that stdin comes from.`},insertPragma:{category:`Special`,type:`boolean`,default:!1,description:`Insert @format pragma into file's first docblock comment.`,cliCategory:`Other`},parser:{category:`Global`,type:`choice`,default:void 0,description:`Which parser to use.`,exception:e=>typeof e==`string`||typeof e==`function`,choices:[{value:`flow`,description:`Flow`},{value:`babel`,description:`JavaScript`},{value:`babel-flow`,description:`Flow`},{value:`babel-ts`,description:`TypeScript`},{value:`typescript`,description:`TypeScript`},{value:`acorn`,description:`JavaScript`},{value:`espree`,description:`JavaScript`},{value:`meriyah`,description:`JavaScript`},{value:`css`,description:`CSS`},{value:`less`,description:`Less`},{value:`scss`,description:`SCSS`},{value:`json`,description:`JSON`},{value:`json5`,description:`JSON5`},{value:`jsonc`,description:`JSON with Comments`},{value:`json-stringify`,description:`JSON.stringify`},{value:`graphql`,description:`GraphQL`},{value:`markdown`,description:`Markdown`},{value:`mdx`,description:`MDX`},{value:`vue`,description:`Vue`},{value:`yaml`,description:`YAML`},{value:`glimmer`,description:`Ember / Handlebars`},{value:`html`,description:`HTML`},{value:`angular`,description:`Angular`},{value:`lwc`,description:`Lightning Web Components`},{value:`mjml`,description:`MJML`}]},plugins:{type:`path`,array:!0,default:[{value:[]}],category:`Global`,description:"Add a plugin. Multiple plugins can be passed as separate `--plugin`s.",exception:e=>typeof e==`string`||typeof e==`object`,cliName:`plugin`,cliCategory:`Config`},printWidth:{category:`Global`,type:`int`,default:80,description:`The line length where Prettier will try wrap.`,range:{start:0,end:1/0,step:1}},rangeEnd:{category:`Special`,type:`int`,default:1/0,range:{start:0,end:1/0,step:1},description:`Format code ending at a given character offset (exclusive).
14
+ The range will extend forwards to the end of the selected statement.`,cliCategory:`Editor`},rangeStart:{category:`Special`,type:`int`,default:0,range:{start:0,end:1/0,step:1},description:`Format code starting at a given character offset.
15
+ The range will extend backwards to the start of the first line containing the selected statement.`,cliCategory:`Editor`},requirePragma:{category:`Special`,type:`boolean`,default:!1,description:`Require either '@prettier' or '@format' to be present in the file's first docblock comment in order for it to be formatted.`,cliCategory:`Other`},tabWidth:{type:`int`,category:`Global`,default:2,description:`Number of spaces per indentation level.`,range:{start:0,end:1/0,step:1}},useTabs:{category:`Global`,type:`boolean`,default:!1,description:`Indent with tabs instead of spaces.`},embeddedLanguageFormatting:{category:`Global`,type:`choice`,default:`auto`,description:`Control how Prettier formats quoted code embedded in the file.`,choices:[{value:`auto`,description:`Format embedded code if Prettier can automatically identify it.`},{value:`off`,description:`Never automatically format embedded code.`}]}};function Gn({plugins:e=[],showDeprecated:t=!1}={}){let n=e.flatMap(e=>e.languages??[]),r=[];for(let i of qn(Object.assign({},...e.map(({options:e})=>e),Wn)))!t&&i.deprecated||(Array.isArray(i.choices)&&(t||(i.choices=i.choices.filter(e=>!e.deprecated)),i.name===`parser`&&(i.choices=[...i.choices,...Kn(i.choices,n,e)])),i.pluginDefaults=Object.fromEntries(e.filter(e=>e.defaultOptions?.[i.name]!==void 0).map(e=>[e.name,e.defaultOptions[i.name]])),r.push(i));return{languages:n,options:r}}function*Kn(e,t,n){let r=new Set(e.map(e=>e.value));for(let e of t)if(e.parsers){for(let t of e.parsers)if(!r.has(t)){r.add(t);let i=n.find(e=>e.parsers&&Un(e.parsers,t)),a=e.name;i?.name&&(a+=` (plugin: ${i.name})`),yield{value:t,description:a}}}}function qn(e){let t=[];for(let[n,r]of Object.entries(e)){let e={name:n,...r};Array.isArray(e.default)&&(e.default=y(0,e.default,-1).value),t.push(e)}return t}var Jn=Array.prototype.toReversed??function(){return[...this].reverse()},Yn=g(`toReversed`,function(){if(Array.isArray(this))return Jn});function Xn(){let e=globalThis,t=e.process?.platform;if(typeof t==`string`)return t.startsWith(`win`);let n=e.Deno?.build?.os;return typeof n==`string`?n===`windows`:e.navigator?.platform?.startsWith(`Win`)??!1}var Zn=Xn();function Qn(e){if(e=e instanceof URL?e:new URL(e),e.protocol!==`file:`)throw TypeError(`URL must be a file URL: received "${e.protocol}"`);return e}function $n(e){return e=Qn(e),decodeURIComponent(e.pathname.replace(/%(?![0-9A-Fa-f]{2})/g,`%25`))}function er(e){e=Qn(e);let t=decodeURIComponent(e.pathname.replace(/\//g,`\\`).replace(/%(?![0-9A-Fa-f]{2})/g,`%25`)).replace(/^\\*([A-Za-z]:)(\\|$)/,`$1\\`);return e.hostname!==``&&(t=`\\\\${e.hostname}${t}`),t}function tr(e){return Zn?er(e):$n(e)}var nr=e=>String(e).split(/[/\\]/).pop(),rr=e=>String(e).startsWith(`file:`);function ir(e,t){if(!t)return;let n=nr(t).toLowerCase();return e.find(({filenames:e})=>e?.some(e=>e.toLowerCase()===n))??e.find(({extensions:e})=>e?.some(e=>n.endsWith(e)))}function ar(e,t){if(t)return e.find(({name:e})=>e.toLowerCase()===t)??e.find(({aliases:e})=>e?.includes(t))??e.find(({extensions:e})=>e?.includes(`.${t}`))}var or=void 0;function sr(e,t){if(t){if(rr(t))try{t=tr(t)}catch{return}if(typeof t==`string`)return e.find(({isSupported:e})=>e?.({filepath:t}))}}function cr(e,t){let n=Yn(0,e.plugins).flatMap(e=>e.languages??[]);return(ar(n,t.language)??ir(n,t.physicalFile)??ir(n,t.file)??sr(n,t.physicalFile)??sr(n,t.file)??or?.(n,t.physicalFile))?.parsers[0]}var lr=cr,J={key:e=>/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(e)?e:JSON.stringify(e),value(e){if(typeof e!=`object`||!e)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(e=>J.value(e)).join(`, `)}]`;let t=Object.keys(e);return t.length===0?`{}`:`{ ${t.map(t=>`${J.key(t)}: ${J.value(e[t])}`).join(`, `)} }`},pair:({key:e,value:t})=>J.value({[e]:t})},ur=new Proxy(String,{get:()=>ur}),Y=ur,dr=(e,t,{descriptor:n})=>{let r=[`${Y.yellow(typeof e==`string`?n.key(e):n.pair(e))} is deprecated`];return t&&r.push(`we now treat it as ${Y.blue(typeof t==`string`?n.key(t):n.pair(t))}`),r.join(`; `)+`.`},fr=Symbol.for(`vnopts.VALUE_NOT_EXIST`),pr=Symbol.for(`vnopts.VALUE_UNCHANGED`),mr=` `.repeat(2),hr=(e,t,n)=>{let{text:r,list:i}=n.normalizeExpectedResult(n.schemas[e].expected(n)),a=[];return r&&a.push(gr(e,t,r,n.descriptor)),i&&a.push([gr(e,t,i.title,n.descriptor)].concat(i.values.map(e=>_r(e,n.loggerPrintWidth))).join(`
16
+ `)),vr(a,n.loggerPrintWidth)};function gr(e,t,n,r){return[`Invalid ${Y.red(r.key(e))} value.`,`Expected ${Y.blue(n)},`,`but received ${t===fr?Y.gray(`nothing`):Y.red(r.value(t))}.`].join(` `)}function _r({text:e,list:t},n){let r=[];return e&&r.push(`- ${Y.blue(e)}`),t&&r.push([`- ${Y.blue(t.title)}:`].concat(t.values.map(e=>_r(e,n-mr.length).replace(/^|\n/g,`$&${mr}`))).join(`
17
+ `)),vr(r,n)}function vr(e,t){if(e.length===1)return e[0];let[n,r]=e,[i,a]=e.map(e=>e.split(`
18
+ `,1)[0].length);return i>t&&i>a?r:n}var X=[],yr=[];function br(e,t,n){if(e===t)return 0;let r=n?.maxDistance,i=e;e.length>t.length&&(e=t,t=i);let a=e.length,o=t.length;for(;a>0&&e.charCodeAt(~-a)===t.charCodeAt(~-o);)a--,o--;let s=0;for(;s<a&&e.charCodeAt(s)===t.charCodeAt(s);)s++;if(a-=s,o-=s,r!==void 0&&o-a>r)return r;if(a===0)return r!==void 0&&o>r?r:o;let c,l,u,d,f=0,p=0;for(;f<a;)yr[f]=e.charCodeAt(s+f),X[f]=++f;for(;p<o;){for(c=t.charCodeAt(s+p),u=p++,l=p,f=0;f<a;f++)d=c===yr[f]?u:u+1,u=X[f],l=X[f]=u>l?d>l?l+1:d:d>u?u+1:d;if(r!==void 0){let e=l;for(f=0;f<a;f++)X[f]<e&&(e=X[f]);if(e>r)return r}}return X.length=a,yr.length=a,r!==void 0&&l>r?r:l}function xr(e,t,n){if(!Array.isArray(t)||t.length===0)return;let r=n?.maxDistance,i=e.length;for(let n of t)if(n===e)return n;if(r===0)return;let a,o=1/0,s=new Set;for(let n of t){if(s.has(n))continue;s.add(n);let t=Math.abs(n.length-i);if(t>=o||r!==void 0&&t>r)continue;let c=Number.isFinite(o)?r===void 0?o:Math.min(o,r):r,l=c===void 0?br(e,n):br(e,n,{maxDistance:c});if(r!==void 0&&l>r)continue;let u=l;if(c!==void 0&&l===c&&c===r&&(u=br(e,n)),u<o&&(o=u,a=n,o===0))break}if(!(r!==void 0&&o>r))return a}var Sr=(e,t,{descriptor:n,logger:r,schemas:i})=>{let a=[`Ignored unknown option ${Y.yellow(n.pair({key:e,value:t}))}.`],o=xr(e,Object.keys(i),{maxDistance:3});o&&a.push(`Did you mean ${Y.blue(n.key(o))}?`),r.warn(a.join(` `))},Cr=[`default`,`expected`,`validate`,`deprecated`,`forward`,`redirect`,`overlap`,`preprocess`,`postprocess`];function wr(e,t){let n=new e(t),r=Object.create(n);for(let e of Cr)e in t&&(r[e]=Tr(t[e],n,Z.prototype[e].length));return r}var Z=class{static create(e){return wr(this,e)}constructor(e){this.name=e.name}default(e){}expected(e){return`nothing`}validate(e,t){return!1}deprecated(e,t){return!1}forward(e,t){}redirect(e,t){}overlap(e,t,n){return e}preprocess(e,t){return e}postprocess(e,t){return pr}};function Tr(e,t,n){return typeof e==`function`?(...r)=>e(...r.slice(0,n-1),t,...r.slice(n-1)):()=>e}var Er=class extends Z{constructor(e){super(e),this._sourceName=e.sourceName}expected(e){return e.schemas[this._sourceName].expected(e)}validate(e,t){return t.schemas[this._sourceName].validate(e,t)}redirect(e,t){return this._sourceName}},Dr=class extends Z{expected(){return`anything`}validate(){return!0}},Or=class extends Z{constructor({valueSchema:e,name:t=e.name,...n}){super({...n,name:t}),this._valueSchema=e}expected(e){let{text:t,list:n}=e.normalizeExpectedResult(this._valueSchema.expected(e));return{text:t&&`an array of ${t}`,list:n&&{title:`an array of the following values`,values:[{list:n}]}}}validate(e,t){if(!Array.isArray(e))return!1;let n=[];for(let r of e){let e=t.normalizeValidateResult(this._valueSchema.validate(r,t),r);e!==!0&&n.push(e.value)}return n.length===0?!0:{value:n}}deprecated(e,t){let n=[];for(let r of e){let e=t.normalizeDeprecatedResult(this._valueSchema.deprecated(r,t),r);e!==!1&&n.push(...e.map(({value:e})=>({value:[e]})))}return n}forward(e,t){let n=[];for(let r of e){let e=t.normalizeForwardResult(this._valueSchema.forward(r,t),r);n.push(...e.map(kr))}return n}redirect(e,t){let n=[],r=[];for(let i of e){let e=t.normalizeRedirectResult(this._valueSchema.redirect(i,t),i);`remain`in e&&n.push(e.remain),r.push(...e.redirect.map(kr))}return n.length===0?{redirect:r}:{redirect:r,remain:n}}overlap(e,t){return e.concat(t)}};function kr({from:e,to:t}){return{from:[e],to:t}}var Ar=class extends Z{expected(){return`true or false`}validate(e){return typeof e==`boolean`}};function jr(e,t){let n=Object.create(null);for(let r of e){let e=r[t];if(n[e])throw Error(`Duplicate ${t} ${JSON.stringify(e)}`);n[e]=r}return n}function Mr(e,t){let n=new Map;for(let r of e){let e=r[t];if(n.has(e))throw Error(`Duplicate ${t} ${JSON.stringify(e)}`);n.set(e,r)}return n}function Nr(){let e=Object.create(null);return t=>{let n=JSON.stringify(t);return e[n]?!0:(e[n]=!0,!1)}}function Pr(e,t){let n=[],r=[];for(let i of e)t(i)?n.push(i):r.push(i);return[n,r]}function Fr(e){return e===Math.floor(e)}function Ir(e,t){if(e===t)return 0;let n=typeof e,r=typeof t,i=[`undefined`,`object`,`boolean`,`number`,`string`];return n===r?n===`string`?e.localeCompare(t):Number(e)-Number(t):i.indexOf(n)-i.indexOf(r)}function Lr(e){return(...t)=>{let n=e(...t);return typeof n==`string`?Error(n):n}}function Rr(e){return e===void 0?{}:e}function zr(e){if(typeof e==`string`)return{text:e};let{text:t,list:n}=e;return Gr((t||n)!==void 0,"Unexpected `expected` result, there should be at least one field."),n?{text:t,list:{title:n.title,values:n.values.map(zr)}}:{text:t}}function Br(e,t){return e===!0?!0:e===!1?{value:t}:e}function Vr(e,t,n=!1){return e===!1?!1:e===!0?n?!0:[{value:t}]:`value`in e?[e]:e.length===0?!1:e}function Hr(e,t){return typeof e==`string`||`key`in e?{from:t,to:e}:`from`in e?{from:e.from,to:e.to}:{from:t,to:e.to}}function Ur(e,t){return e===void 0?[]:Array.isArray(e)?e.map(e=>Hr(e,t)):[Hr(e,t)]}function Wr(e,t){let n=Ur(typeof e==`object`&&`redirect`in e?e.redirect:e,t);return n.length===0?{remain:t,redirect:n}:typeof e==`object`&&`remain`in e?{remain:e.remain,redirect:n}:{redirect:n}}function Gr(e,t){if(!e)throw Error(t)}var Kr=class extends Z{constructor(e){super(e),this._choices=Mr(e.choices.map(e=>e&&typeof e==`object`?e:{value:e}),`value`)}expected({descriptor:e}){let t=Array.from(this._choices.keys()).map(e=>this._choices.get(e)).filter(({hidden:e})=>!e).map(e=>e.value).sort(Ir).map(e.value),n=t.slice(0,-2),r=t.slice(-2);return{text:n.concat(r.join(` or `)).join(`, `),list:{title:`one of the following values`,values:t}}}validate(e){return this._choices.has(e)}deprecated(e){let t=this._choices.get(e);return t&&t.deprecated?{value:e}:!1}forward(e){let t=this._choices.get(e);return t?t.forward:void 0}redirect(e){let t=this._choices.get(e);return t?t.redirect:void 0}},qr=class extends Z{expected(){return`a number`}validate(e,t){return typeof e==`number`}},Jr=class extends qr{expected(){return`an integer`}validate(e,t){return t.normalizeValidateResult(super.validate(e,t),e)===!0&&Fr(e)}},Yr=class extends Z{expected(){return`a string`}validate(e){return typeof e==`string`}},Xr=J,Zr=Sr,Qr=hr,$r=dr,ei=class{constructor(e,t){let{logger:n=console,loggerPrintWidth:r=80,descriptor:i=Xr,unknown:a=Zr,invalid:o=Qr,deprecated:s=$r,missing:c=()=>!1,required:l=()=>!1,preprocess:u=e=>e,postprocess:d=()=>pr}=t||{};this._utils={descriptor:i,logger:n||{warn:()=>{}},loggerPrintWidth:r,schemas:jr(e,`name`),normalizeDefaultResult:Rr,normalizeExpectedResult:zr,normalizeDeprecatedResult:Vr,normalizeForwardResult:Ur,normalizeRedirectResult:Wr,normalizeValidateResult:Br},this._unknownHandler=a,this._invalidHandler=Lr(o),this._deprecatedHandler=s,this._identifyMissing=(e,t)=>!(e in t)||c(e,t),this._identifyRequired=l,this._preprocess=u,this._postprocess=d,this.cleanHistory()}cleanHistory(){this._hasDeprecationWarned=Nr()}normalize(e){let t={},n=[this._preprocess(e,this._utils)],r=()=>{for(;n.length!==0;){let e=n.shift(),r=this._applyNormalization(e,t);n.push(...r)}};r();for(let e of Object.keys(this._utils.schemas)){let r=this._utils.schemas[e];if(!(e in t)){let t=Rr(r.default(this._utils));`value`in t&&n.push({[e]:t.value})}}r();for(let e of Object.keys(this._utils.schemas)){if(!(e in t))continue;let n=this._utils.schemas[e],r=t[e],i=n.postprocess(r,this._utils);i!==pr&&(this._applyValidation(i,e,n),t[e]=i)}return this._applyPostprocess(t),this._applyRequiredCheck(t),t}_applyNormalization(e,t){let n=[],{knownKeys:r,unknownKeys:i}=this._partitionOptionKeys(e);for(let i of r){let r=this._utils.schemas[i],a=r.preprocess(e[i],this._utils);this._applyValidation(a,i,r);let o=({from:e,to:t})=>{n.push(typeof t==`string`?{[t]:e}:{[t.key]:t.value})},s=({value:e,redirectTo:t})=>{let n=Vr(r.deprecated(e,this._utils),a,!0);if(n!==!1)if(n===!0)this._hasDeprecationWarned(i)||this._utils.logger.warn(this._deprecatedHandler(i,t,this._utils));else for(let{value:e}of n){let n={key:i,value:e};if(!this._hasDeprecationWarned(n)){let r=typeof t==`string`?{key:t,value:e}:t;this._utils.logger.warn(this._deprecatedHandler(n,r,this._utils))}}};Ur(r.forward(a,this._utils),a).forEach(o);let c=Wr(r.redirect(a,this._utils),a);if(c.redirect.forEach(o),`remain`in c){let e=c.remain;t[i]=i in t?r.overlap(t[i],e,this._utils):e,s({value:e})}for(let{from:e,to:t}of c.redirect)s({value:e,redirectTo:t})}for(let r of i){let i=e[r];this._applyUnknownHandler(r,i,t,(e,t)=>{n.push({[e]:t})})}return n}_applyRequiredCheck(e){for(let t of Object.keys(this._utils.schemas))if(this._identifyMissing(t,e)&&this._identifyRequired(t))throw this._invalidHandler(t,fr,this._utils)}_partitionOptionKeys(e){let[t,n]=Pr(Object.keys(e).filter(t=>!this._identifyMissing(t,e)),e=>e in this._utils.schemas);return{knownKeys:t,unknownKeys:n}}_applyValidation(e,t,n){let r=Br(n.validate(e,this._utils),e);if(r!==!0)throw this._invalidHandler(t,r.value,this._utils)}_applyUnknownHandler(e,t,n,r){let i=this._unknownHandler(e,t,this._utils);if(i)for(let e of Object.keys(i)){if(this._identifyMissing(e,i))continue;let t=i[e];e in this._utils.schemas?r(e,t):n[e]=t}}_applyPostprocess(e){let t=this._postprocess(e,this._utils);if(t!==pr){if(t.delete)for(let n of t.delete)delete e[n];if(t.override){let{knownKeys:n,unknownKeys:r}=this._partitionOptionKeys(t.override);for(let r of n){let n=t.override[r];this._applyValidation(n,r,this._utils.schemas[r]),e[r]=n}for(let n of r){let r=t.override[n];this._applyUnknownHandler(n,r,e,(t,n)=>{let r=this._utils.schemas[t];this._applyValidation(n,t,r),e[t]=n})}}}}},ti;function ni(e,t,{logger:n=!1,isCLI:r=!1,passThrough:i=!1,FlagSchema:a,descriptor:o}={}){if(r){if(!a)throw Error(`'FlagSchema' option is required.`);if(!o)throw Error(`'descriptor' option is required.`)}else o=J;let s=i?Array.isArray(i)?(e,t)=>i.includes(e)?{[e]:t}:void 0:(e,t)=>({[e]:t}):(e,t,n)=>{let{_:r,...i}=n.schemas;return Sr(e,t,{...n,schemas:i})},c=new ei(ri(t,{isCLI:r,FlagSchema:a}),{logger:n,unknown:s,descriptor:o}),l=n!==!1;l&&ti&&(c._hasDeprecationWarned=ti);let u=c.normalize(e);return l&&(ti=c._hasDeprecationWarned),u}function ri(e,{isCLI:t,FlagSchema:n}){let r=[];t&&r.push(Dr.create({name:`_`}));for(let i of e)r.push(ii(i,{isCLI:t,optionInfos:e,FlagSchema:n})),i.alias&&t&&r.push(Er.create({name:i.alias,sourceName:i.name}));return r}function ii(e,{isCLI:t,optionInfos:n,FlagSchema:r}){let{name:i}=e,a={name:i},o,s={};switch(e.type){case`int`:o=Jr,t&&(a.preprocess=Number);break;case`string`:o=Yr;break;case`choice`:o=Kr,a.choices=e.choices.map(t=>t?.redirect?{...t,redirect:{to:{key:e.name,value:t.redirect}}}:t);break;case`boolean`:o=Ar;break;case`flag`:o=r,a.flags=n.flatMap(e=>[e.alias,e.description&&e.name,e.oppositeDescription&&`no-${e.name}`].filter(Boolean));break;case`path`:o=Yr;break;default:throw Error(`Unexpected type ${e.type}`)}if(e.exception?a.validate=(t,n,r)=>e.exception(t)||n.validate(t,r):a.validate=(e,t,n)=>e===void 0||t.validate(e,n),e.redirect&&(s.redirect=t=>t?{to:typeof e.redirect==`string`?e.redirect:{key:e.redirect.option,value:e.redirect.value}}:void 0),e.deprecated&&(s.deprecated=!0),t&&!e.array){let e=a.preprocess||(e=>e);a.preprocess=(t,n,r)=>n.preprocess(e(Array.isArray(t)?y(0,t,-1):t),r)}return e.array?Or.create({...t?{preprocess:e=>Array.isArray(e)?e:[e]}:{},...s,valueSchema:o.create(a)}):o.create({...a,...s})}var ai=ni,oi=Array.prototype.findLast??function(e){for(let t=this.length-1;t>=0;t--){let n=this[t];if(e(n,t,this))return n}},si=g(`findLast`,function(){if(Array.isArray(this))return oi}),ci=Symbol.for(`PRETTIER_IS_FRONT_MATTER`),li=[];function ui(e){return!!e?.[ci]}var di=ui,fi=new Set([`yaml`,`toml`]),pi=({node:e})=>di(e)&&fi.has(e.language);async function mi(e,t,n,r){let{node:i}=n,{language:a}=i;if(!fi.has(a))return;let o=i.value.trim(),s;if(o){let t=a===`yaml`?a:lr(r,{language:a});if(!t)return;s=o?await e(o,{parser:t}):``}else s=o;return Xe([i.startDelimiter,i.explicitLanguage??``,B,s,s?B:``,i.endDelimiter])}function hi(e,t){return pi({node:e})&&(delete t.end,delete t.raw,delete t.value),t}var gi=hi;function _i({node:e}){return e.raw}var vi=_i,yi=new Set([`tokens`,`comments`,`parent`,`enclosingNode`,`precedingNode`,`followingNode`]),bi=e=>Object.keys(e).filter(e=>!yi.has(e));function xi(e,t){let n=e?t=>e(t,yi):bi;return t?new Proxy(n,{apply:(e,t,n)=>di(n[0])?li:Reflect.apply(e,t,n)}):n}var Si=xi;function Ci(e,t){if(!t)throw Error(`parserName is required.`);let n=si(0,e,e=>e.parsers&&Un(e.parsers,t));if(n)return n;let r=`Couldn't resolve parser "${t}".`;throw r+=` Plugins must be explicitly added to the standalone bundle.`,new Vn(r)}function wi(e,t){if(!t)throw Error(`astFormat is required.`);let n=si(0,e,e=>e.printers&&Un(e.printers,t));if(n)return n;let r=`Couldn't find plugin for AST format "${t}".`;throw r+=` Plugins must be explicitly added to the standalone bundle.`,new Vn(r)}function Ti({plugins:e,parser:t}){return Ei(Ci(e,t),t)}function Ei(e,t){let n=e.parsers[t];return typeof n==`function`?n():n}async function Di(e,t){let n=e.printers[t];return Ai(typeof n==`function`?await n():n)}function Oi(e){let{features:t,getVisitorKeys:n,embed:r,massageAstNode:i,print:a,...o}=e;t=Ni(t);let s=t.experimental_frontMatterSupport;n=Si(n,s.massageAstNode||s.embed||s.print);let c=i;i&&s.massageAstNode&&(c=new Proxy(i,{apply(e,t,n){return gi(...n),Reflect.apply(e,t,n)}}));let l=r;if(r){let e;l=new Proxy(r,{get(t,i,a){return i===`getVisitorKeys`?(e??(e=r.getVisitorKeys?Si(r.getVisitorKeys,s.massageAstNode||s.embed):n),e):Reflect.get(t,i,a)},apply:(e,t,n)=>s.embed&&pi(...n)?mi:Reflect.apply(e,t,n)})}let u=a;return s.print&&(u=new Proxy(a,{apply(e,t,n){let[r]=n;return di(r.node)?vi(r):Reflect.apply(e,t,n)}})),{features:t,getVisitorKeys:n,embed:l,massageAstNode:c,print:u,...o}}var ki=new WeakMap;function Ai(e){return xe(ki,e,Oi)}var ji=Object.fromEntries([`clean`,`embed`,`print`].map(e=>[e,!1]));function Mi(e){return{...ji,...e}}function Ni(e){return{experimental_avoidAstMutation:!1,...e,experimental_frontMatterSupport:Mi(e?.experimental_frontMatterSupport)}}var Pi={astFormat:`estree`,printer:{},originalText:void 0,locStart:null,locEnd:null,getVisitorKeys:null};async function Fi(e,t={}){let n={...e};if(!n.parser){if(!n.filepath)throw new Hn(`No parser and no file path given, couldn't infer a parser.`);if(n.parser=lr(n,{physicalFile:n.filepath}),!n.parser)throw new Hn(`No parser could be inferred for file "${n.filepath}".`)}let r=Gn({plugins:e.plugins,showDeprecated:!0}).options,i={...Pi,...Object.fromEntries(r.filter(e=>e.default!==void 0).map(e=>[e.name,e.default]))},a=Ci(n.plugins,n.parser),o=await Ei(a,n.parser);n.astFormat=o.astFormat,n.locEnd=o.locEnd,n.locStart=o.locStart;let s=a.printers?.[o.astFormat]?a:wi(n.plugins,o.astFormat),c=await Di(s,o.astFormat);n.printer=c,n.getVisitorKeys=c.getVisitorKeys;let l=s.defaultOptions?Object.fromEntries(Object.entries(s.defaultOptions).filter(([,e])=>e!==void 0)):{},u={...i,...l};for(let[e,t]of Object.entries(u))n[e]??(n[e]=t);return n.parser===`json`&&(n.trailingComma=`none`),ai(n,r,{passThrough:Object.keys(Pi),...t})}var Q=Fi,Ii=/\r\n|[\n\r\u2028\u2029]/;function Li(e,t,n,r){let i={column:null,line:-1,...e.start},a={...i,...e.end},{linesAbove:o=2,linesBelow:s=3}=n||{},c=i.line-r,l=i.column,u=a.line-r,d=a.column,f=Math.max(c-(o+1),0),p=Math.min(t.length,u+s);c===-1&&(f=0),u===-1&&(p=t.length);let m=u-c,h={};if(m)for(let e=0;e<=m;e++){let n=e+c;l==null?h[n]=!0:e===0?h[n]=[l,t[n-1].length-l]:e===m?h[n]=[0,d]:h[n]=[0,t[n-1].length]}else if(l===d)l==null?h[c]=!0:h[c]=[l,0];else{let e=l??0;h[c]=[e,(d??e)-e]}return{start:f,end:p,markerLines:h}}function Ri(e,t,n={},r){let{defs:i,highlight:a}=r||{defs:{gutter:String,marker:String,message:String,reset:String},highlight:String},o=(n.startLine||1)-1,{start:s,end:c,markerLines:l}=Li(t,e.split(Ii),n,o),u=t.start&&typeof t.start.column==`number`,d=String(c+o).length,f=a(e).split(Ii,c).slice(s,c).map((e,t)=>{let r=s+1+t,a=` ${` ${r+o}`.slice(-d)} |`,c=l[r],u=!l[r+1];if(c){let t=``;if(Array.isArray(c)){let r=e.slice(0,c[0]).replace(/[^\t]/g,` `),o=c[1]||1;t=[`
19
+ `,i.gutter(a.replace(/\d/g,` `)),` `,r,i.marker(`^`).repeat(o)].join(``),u&&n.message&&(t+=` `+i.message(n.message))}return[i.marker(`>`),i.gutter(a),e.length>0?` ${e}`:``,t].join(``)}else return` ${i.gutter(a)}${e.length>0?` ${e}`:``}`}).join(`
20
+ `);return n.message&&!u&&(f=`${` `.repeat(d+1)}${n.message}
21
+ ${f}`),i.reset(f)}function zi(e,t,n={}){return Ri(e,t,n)}async function Bi(e,t){let n=await Ti(t),r=n.preprocess?await n.preprocess(e,t):e;t.originalText=r;let i;try{i=await n.parse(r,t,t)}catch(t){Vi(t,e)}return{text:r,ast:i}}function Vi(e,t){let{loc:n}=e;if(n){let{start:r,end:i}=n;r&&(r={line:r.line,column:r.column-1}),i&&(i={line:i.line,column:i.column-1});let a=zi(t,{start:r,end:i},{highlightCode:!0});e.message+=`
22
+ `+a,e.codeFrame=a}throw e}var Hi=Bi;async function Ui(e,t,n,r,i){if(n.embeddedLanguageFormatting!==`auto`)return;let{printer:a}=n,{embed:o}=a;if(!o)return;if(o.length>2)throw Error(`printer.embed has too many parameters. The API changed in Prettier v3. Please update your plugin. See https://prettier.io/docs/plugins#optional-embed`);let{hasPrettierIgnore:s}=a,{getVisitorKeys:c}=o,l=[];f();let u=e.stack;for(let{print:r,node:a,pathStack:o}of l)try{e.stack=o;let s=await r(d,t,e,n);s&&i.set(a,s)}catch(e){if(globalThis.PRETTIER_DEBUG)throw e}e.stack=u;function d(e,t){return Wi(e,t,n,r)}function f(){let{node:t}=e;if(typeof t!=`object`||!t||s?.(e))return;for(let n of c(t))Array.isArray(t[n])?e.each(f,n):e.call(f,n);let r=o(e,n);if(r){if(typeof r==`function`){l.push({print:r,node:t,pathStack:[...e.stack]});return}i.set(t,r)}}}async function Wi(e,t,n,r){let i=await Q({...n,...t,parentParser:n.parser,originalText:e,cursorOffset:void 0,rangeStart:void 0,rangeEnd:void 0},{passThrough:!0}),{ast:a}=await Hi(e,i);return Re(await r(a,i))}function Gi(e,t,n,r){let{originalText:i,[_e]:a,locStart:o,locEnd:s,[Symbol.for(`printedComments`)]:c}=t,{node:l}=e,u=o(l),d=s(l);for(let e of a)o(e)>=u&&s(e)<=d&&c.add(e);let{printPrettierIgnored:f}=t.printer;return f?f(e,t,n,r):i.slice(u,d)}var Ki=Gi;async function qi(e,t){({ast:e}=await Yi(e,t));let n=new Map,r=new Xt(e),i=Bn(t),a=new Map;await Ui(r,s,t,qi,a);let o=await Ji(r,t,s,void 0,a);if(zn(t),t.cursorOffset>=0){if(t.nodeAfterCursor&&!t.nodeBeforeCursor)return[z,o];if(t.nodeBeforeCursor&&!t.nodeAfterCursor)return[o,z]}return o;function s(e,t){return e===void 0||e===r?c(t):Array.isArray(e)?r.call(()=>c(t),...e):r.call(()=>c(t),e)}function c(e){i(r);let o=r.node;if(o==null)return``;let c=nn(o)&&e===void 0;if(c&&n.has(o))return n.get(o);let l=Ji(r,t,s,e,a);return c&&n.set(o,l),l}}function Ji(e,t,n,r,i){let{node:a}=e,{printer:o}=t,s;switch(s=o.hasPrettierIgnore?.(e)?Ki(e,t,n,r):i.has(a)?i.get(a):o.print(e,t,n,r),a){case t.cursorNode:s=We(s,e=>[z,e,z]);break;case t.nodeBeforeCursor:s=We(s,e=>[e,z]);break;case t.nodeAfterCursor:s=We(s,e=>[z,e]);break}return o.printComment&&en(a.comments)&&!o.willPrintOwnComments?.(e,t)&&(s=Rn(e,s,t)),s}async function Yi(e,t){let n=e.comments??[];t[_e]=n,t[Symbol.for(`printedComments`)]=new Set,wn(e,t);let{printer:{preprocess:r}}=t;return e=r?await r(e,t):e,{ast:e,comments:n}}function Xi(e,t){let{cursorOffset:n,locStart:r,locEnd:i,getVisitorKeys:a}=t,o=e=>r(e)<=n&&i(e)>=n,s=e,c=[e];for(let t of dn(e,{getVisitorKeys:a,filter:o}))c.push(t),s=t;if(fn(s,{getVisitorKeys:a}))return{cursorNode:s};let l,u,d=-1,f=1/0;for(;c.length>0&&(l===void 0||u===void 0);){s=c.pop();let e=l!==void 0,t=u!==void 0;for(let o of un(s,{getVisitorKeys:a})){if(!e){let e=i(o);e<=n&&e>d&&(l=o,d=e)}if(!t){let e=r(o);e>=n&&e<f&&(u=o,f=e)}}}return{nodeBeforeCursor:l,nodeAfterCursor:u}}var Zi=Xi;function Qi(e,t){let{printer:n}=t,r=n.massageAstNode;if(!r)return e;let{getVisitorKeys:i}=n,{ignoredProperties:a}=r;return o(e);function o(e,t){if(!nn(e))return e;if(Array.isArray(e))return e.map(e=>o(e,t)).filter(Boolean);let n={},s=new Set(i(e));for(let t in e)!Un(e,t)||a?.has(t)||(s.has(t)?n[t]=o(e[t],e):n[t]=e[t]);let c=r(e,n,t);if(c!==null)return c??n}}var $i=Qi,ea=Array.prototype.findLastIndex??function(e){for(let t=this.length-1;t>=0;t--){let n=this[t];if(e(n,t,this))return t}return-1},ta=g(`findLastIndex`,function(){if(Array.isArray(this))return ea});function na(e,t){return t=new Set(t),e.find(e=>sa.has(e.type)&&t.has(e))}function ra(e){let t=ta(0,e,e=>e.type!==`Program`&&e.type!==`File`);return t===-1?e:e.slice(0,t+1)}function ia(e,t,{locStart:n,locEnd:r}){let[i,...a]=e,[o,...s]=t;if(i===o)return[i,o];let c=n(i);for(let e of ra(s))if(n(e)>=c)o=e;else break;let l=r(o);for(let e of ra(a)){if(r(e)<=l)i=e;else break;if(i===o)break}return[i,o]}function aa(e,t,n,r,i=[],a,o){let{locStart:s,locEnd:c}=o,l=s(e),u=c(e);if(t>u||t<l||a===`rangeEnd`&&t===l||a===`rangeStart`&&t===u)return;let d=[e,...i],f=hn(e,d,{cache:xn,locStart:s,locEnd:c,getVisitorKeys:n.getVisitorKeys,filter:n.printer.canAttachComment,getChildren:n.printer.getCommentChildNodes});for(let e of f){let i=aa(e,t,n,r,d,a,o);if(i)return i}if(r(e,i[0]))return d}function oa(e,t){return t!==`DeclareExportDeclaration`&&e!==`TypeParameterDeclaration`&&(e===`Directive`||e===`TypeAlias`||e===`TSExportAssignment`||e.startsWith(`Declare`)||e.startsWith(`TSDeclare`)||e.endsWith(`Statement`)||e.endsWith(`Declaration`))}var sa=new Set([`JsonRoot`,`ObjectExpression`,`ArrayExpression`,`StringLiteral`,`NumericLiteral`,`BooleanLiteral`,`NullLiteral`,`UnaryExpression`,`TemplateLiteral`]),ca=new Set([`OperationDefinition`,`FragmentDefinition`,`VariableDefinition`,`TypeExtensionDefinition`,`ObjectTypeDefinition`,`FieldDefinition`,`DirectiveDefinition`,`EnumTypeDefinition`,`EnumValueDefinition`,`InputValueDefinition`,`InputObjectTypeDefinition`,`SchemaDefinition`,`OperationTypeDefinition`,`InterfaceTypeDefinition`,`UnionTypeDefinition`,`ScalarTypeDefinition`]);function la(e,t,n){if(!t)return!1;switch(e.parser){case`flow`:case`hermes`:case`babel`:case`babel-flow`:case`babel-ts`:case`typescript`:case`acorn`:case`espree`:case`meriyah`:case`oxc`:case`oxc-ts`:case`__babel_estree`:return oa(t.type,n?.type);case`json`:case`json5`:case`jsonc`:case`json-stringify`:return sa.has(t.type);case`graphql`:return ca.has(t.kind);case`vue`:return t.tag!==`root`}return!1}function ua(e,t,n){let{rangeStart:r,rangeEnd:i}=t,a=e.slice(r,i).search(/\S/),o=a===-1;if(!o)for(r+=a;i>r&&!/\S/.test(e[i-1]);--i);let s=t.printer.features?.experimental_locForRangeFormat??t,c=aa(n,r,t,(e,n)=>la(t,e,n),[],`rangeStart`,s);if(!c)return;let l=o?c:aa(n,i,t,e=>la(t,e),[],`rangeEnd`,s);if(!l)return;let u,d;if(n.type===`JsonRoot`){let e=na(c,l);u=e,d=e}else[u,d]=ia(c,l,t);let{locStart:f,locEnd:p}=s;return[Math.min(f(u),f(d)),Math.max(p(u),p(d))]}var da=``,fa=Symbol(`cursor`);async function pa(e,t,n=0){if(!e||e.trim().length===0)return{formatted:``,cursorOffset:-1,comments:[]};let{ast:r,text:i}=await Hi(e,t);t.cursorOffset>=0&&(t={...t,...Zi(r,t)});let a=await qi(r,t,n);n>0&&(a=Qe([B,a],n,t.tabWidth));let o=qt(a,t);if(n>0){let e=o.formatted.trim();o.cursorNodeStart!==void 0&&(o.cursorNodeStart-=o.formatted.indexOf(e),o.cursorNodeStart<0&&(o.cursorNodeStart=0,o.cursorNodeText=o.cursorNodeText.trimStart()),o.cursorNodeStart+o.cursorNodeText.length>e.length&&(o.cursorNodeText=o.cursorNodeText.trimEnd())),o.formatted=e+fe(t.endOfLine)}let s=t[_e];if(t.cursorOffset>=0){let e,n,r,a;if((t.cursorNode||t.nodeBeforeCursor||t.nodeAfterCursor)&&o.cursorNodeText)if(r=o.cursorNodeStart,a=o.cursorNodeText,t.cursorNode)e=t.locStart(t.cursorNode),n=i.slice(e,t.locEnd(t.cursorNode));else{if(!t.nodeBeforeCursor&&!t.nodeAfterCursor)throw Error(`Cursor location must contain at least one of cursorNode, nodeBeforeCursor, nodeAfterCursor`);e=t.nodeBeforeCursor?t.locEnd(t.nodeBeforeCursor):0;let r=t.nodeAfterCursor?t.locStart(t.nodeAfterCursor):i.length;n=i.slice(e,r)}else e=0,n=i,r=0,a=o.formatted;let c=t.cursorOffset-e;if(n===a)return{formatted:o.formatted,cursorOffset:r+c,comments:s};let l=n.split(``);l.splice(c,0,fa);let u=ne(l,a.split(``)),d=r;for(let e of u)if(e.removed){if(e.value.includes(fa))break}else d+=e.count;return{formatted:o.formatted,cursorOffset:d,comments:s}}return{formatted:o.formatted,cursorOffset:-1,comments:s}}async function ma(e,t){let{ast:n,text:r}=await Hi(e,t),[i,a]=ua(r,t,n)??[0,0],o=r.slice(i,a),s=Math.min(i,r.lastIndexOf(`
23
+ `,i)+1),c=r.slice(s,i).match(/^\s*/)[0],l=Yt(c,t.tabWidth),u=await pa(o,{...t,rangeStart:0,rangeEnd:1/0,cursorOffset:t.cursorOffset>i&&t.cursorOffset<=a?t.cursorOffset-i:-1,endOfLine:`lf`},l),d=u.formatted.trimEnd(),{cursorOffset:f}=t;f>a?f+=d.length-o.length:u.cursorOffset>=0&&(f=u.cursorOffset+i);let p=r.slice(0,i)+d+r.slice(a);if(t.endOfLine!==`lf`){let e=fe(t.endOfLine);f>=0&&e===`\r
24
+ `&&(f+=me(p.slice(0,f),`
25
+ `)),p=v(0,p,`
26
+ `,e)}return{formatted:p,cursorOffset:f,comments:u.comments}}function ha(e,t,n){return typeof t!=`number`||Number.isNaN(t)||t<0||t>e.length?n:t}function ga(e,t){let{cursorOffset:n,rangeStart:r,rangeEnd:i}=t;return n=ha(e,n,-1),r=ha(e,r,0),i=ha(e,i,e.length),{...t,cursorOffset:n,rangeStart:r,rangeEnd:i}}function _a(e,t){let{cursorOffset:n,rangeStart:r,rangeEnd:i,endOfLine:a}=ga(e,t),o=e.charAt(0)===da;if(o&&(e=e.slice(1),n--,r--,i--),a===`auto`&&(a=de(e)),e.includes(`\r`)){let t=t=>me(e.slice(0,Math.max(t,0)),`\r
27
+ `);n-=t(n),r-=t(r),i-=t(i),e=ge(e)}return{hasBOM:o,text:e,options:ga(e,{...t,cursorOffset:n,rangeStart:r,rangeEnd:i,endOfLine:a})}}async function va(e,t){let n=await Ti(t);return!n.hasPragma||n.hasPragma(e)}async function ya(e,t){return(await Ti(t)).hasIgnorePragma?.(e)}async function ba(e,t){let{hasBOM:n,text:r,options:i}=_a(e,await Q(t));if(i.rangeStart>=i.rangeEnd&&r!==``||i.requirePragma&&!await va(r,i)||i.checkIgnorePragma&&await ya(r,i))return{formatted:e,cursorOffset:t.cursorOffset,comments:[]};let a;return i.rangeStart>0||i.rangeEnd<r.length?a=await ma(r,i):(!i.requirePragma&&i.insertPragma&&i.printer.insertPragma&&!await va(r,i)&&(r=i.printer.insertPragma(r)),a=await pa(r,i)),n&&(a.formatted=da+a.formatted,a.cursorOffset>=0&&a.cursorOffset++),a}async function xa(e,t,n){let{text:r,options:i}=_a(e,await Q(t)),a=await Hi(r,i);return n&&(n.preprocessForPrint&&(a.ast=await Yi(a.ast,i)),n.massage&&(a.ast=$i(a.ast,i))),a}async function Sa(e,t){return t=await Q(t),qt(await qi(e,t),t)}async function Ca(e,t){let{formatted:n}=await ba(ht(e),{...t,parser:`__js_expression`});return n}async function wa(e,t){t=await Q(t);let{ast:n}=await Hi(e,t);return t.cursorOffset>=0&&(t={...t,...Zi(n,t)}),qi(n,t)}async function Ta(e,t){return qt(e,await Q(t))}var Ea={};m(Ea,{builders:()=>Da,printer:()=>Oa,utils:()=>ka});var Da={join:at,line:st,softline:ct,hardline:B,literalline:dt,group:tt,conditionalGroup:nt,fill:et,lineSuffix:ft,lineSuffixBoundary:pt,cursor:z,breakParent:$e,ifBreak:rt,trim:mt,indent:Je,indentIfBreak:it,align:R,addAlignmentToDoc:Qe,markAsRoot:Xe,dedentToRoot:Ye,dedent:Ze,hardlineWithoutBreakParent:lt,literallineWithoutBreakParent:ut,label:ot,concat:e=>e},Oa={printDocToString:qt},ka={willBreak:je,traverseDoc:De,findInDoc:ke,mapDoc:Oe,removeLines:Fe,stripTrailingHardline:Re,replaceEndOfLine:Ve,canBreak:Ue},Aa=`3.9.4`,ja={};m(ja,{addDanglingComment:()=>yn,addLeadingComment:()=>vn,addTrailingComment:()=>bn,getAlignmentSize:()=>Yt,getIndentSize:()=>Va,getMaxContinuousCount:()=>Wa,getNextNonSpaceNonCommentCharacter:()=>Ka,getNextNonSpaceNonCommentCharacterIndex:()=>ro,getPreferredQuote:()=>Za,getStringWidth:()=>Pt,hasNewline:()=>q,hasNewlineInRange:()=>$a,hasSpaces:()=>to,isNextLineEmpty:()=>co,isNextLineEmptyAfterIndex:()=>za,isPreviousLineEmpty:()=>ao,makeString:()=>so,skip:()=>W,skipEverythingButNewLine:()=>on,skipInlineComment:()=>Na,skipNewline:()=>K,skipSpaces:()=>G,skipToLineEnd:()=>an,skipTrailingComment:()=>Fa,skipWhitespace:()=>rn});function Ma(e,t){if(t===!1)return!1;if(e.charAt(t)===`/`&&e.charAt(t+1)===`*`){for(let n=t+2;n<e.length;++n)if(e.charAt(n)===`*`&&e.charAt(n+1)===`/`)return n+2}return t}var Na=Ma;function Pa(e,t){return t===!1?!1:e.charAt(t)===`/`&&e.charAt(t+1)===`/`?on(e,t):t}var Fa=Pa;function Ia(e,t){let n=null,r=t;for(;r!==n;)n=r,r=G(e,r),r=Na(e,r),r=Fa(e,r),r=K(e,r);return r}var La=Ia;function Ra(e,t){let n=null,r=t;for(;r!==n;)n=r,r=an(e,r),r=Na(e,r),r=G(e,r);return r=Fa(e,r),r=K(e,r),r!==!1&&q(e,r)}var za=Ra;function Ba(e,t){let n=e.lastIndexOf(`
28
+ `);return n===-1?0:Yt(e.slice(n+1).match(/^[\t ]*/)[0],t)}var Va=Ba;function Ha(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}function Ua(e,t){let n=e.matchAll(RegExp(`(?:${Ha(t)})+`,`g`));return n.reduce||(n=[...n]),n.reduce((e,[t])=>Math.max(e,t.length),0)/t.length}var Wa=Ua;function Ga(e,t){let n=La(e,t);return n===!1?``:e.charAt(n)}var Ka=Ga,qa=Object.freeze({character:`'`,codePoint:39}),Ja=Object.freeze({character:`"`,codePoint:34}),Ya=Object.freeze({preferred:qa,alternate:Ja}),Xa=Object.freeze({preferred:Ja,alternate:qa});function Za(e,t){let{preferred:n,alternate:r}=t===!0||t===`'`?Ya:Xa,{length:i}=e,a=0,o=0;for(let t=0;t<i;t++){let i=e.charCodeAt(t);i===n.codePoint?a++:i===r.codePoint&&o++}return(a>o?r:n).character}function Qa(e,t,n){for(let r=t;r<n;++r)if(e.charAt(r)===`
29
+ `)return!0;return!1}var $a=Qa;function eo(e,t,n={}){return G(e,n.backwards?t-1:t,n)!==t}var to=eo;function no(e,t,n){return La(e,n(t))}function ro(e,t){return arguments.length===2||typeof t==`number`?La(e,t):no(...arguments)}function io(e,t,n){return jn(e,n(t))}function ao(e,t){return arguments.length===2||typeof t==`number`?jn(e,t):io(...arguments)}function oo(e,t,n){return za(e,n(t))}function so(e,t,n){let r=t===`"`?`'`:`"`;return t+v(0,e,/\\(.)|(["'])/gs,(e,i,a)=>i===r?i:a===t?`\\`+a:a||(n&&/^[^\n\r"'0-7\\bfnrt-vx\u2028\u2029]$/.test(i)?i:`\\`+i))+t}function co(e,t){return arguments.length===2||typeof t==`number`?za(e,t):oo(...arguments)}function $(e,t=1){return async(...n)=>{let r=n[t]??{},i=r.plugins??[];return n[t]={...r,plugins:Array.isArray(i)?i:Object.values(i)},await e(...n)}}var lo=$(ba);async function uo(e,t){let{formatted:n}=await lo(e,{...t,cursorOffset:-1});return n}async function fo(e,t){return await uo(e,t)===e}var po=$(Gn,0),mo={parse:$(xa),formatAST:$(Sa),formatDoc:$(Ca),printToDoc:$(wa),printDocToString:$(Ta)};export{mo as __debug,fo as check,h as default,Ea as doc,uo as format,lo as formatWithCursor,po as getSupportInfo,ja as util,Aa as version};