diff --git a/.agents/skills/koda-zensical/SKILL.md b/.agents/skills/koda-zensical/SKILL.md new file mode 100644 index 0000000..7848690 --- /dev/null +++ b/.agents/skills/koda-zensical/SKILL.md @@ -0,0 +1,384 @@ +--- +name: koda-zensical +description: Навык, который необходим для работы в этом репозитории и должен закружаться безусловно. Этот навык содержит инструкции, которые позволят правильно писать и форматировать исходные файлы документации. +--- + +# Документирование + +## Принципы написания документации + +### Язык и стиль + +- Пиши простым и понятным языком +- Избегай просторечий и сложных технических терминов без объяснения +- Используй активный залог +- Обращайся к пользователю на "вы" +- Поддерживай единый стиль во всех документах +- Не злоупотребляй emoji + +### Примеры + +- Приводи примеры конфигурации +- Показывай скриншоты для важных шагов +- Добавляй таблицы для сравнения опций + +### Исправление и избегание ошибок + +- Синтаксические и грамматические ошибки должны исправляться в соответствии с правиламии и нормами естественного языка +- При изменении структуры документации: + - в новый документ следует добавить ссылки на другие релевантные документы или якоря + - ссылки на перемещённый или удалённый документ/якорь следует обновить в каждом существующем документе + - следует проверять вывод команды `make site` на наличие ошибок и предупреждений компилятора + +## Синтаксис файлов + +В основе документации лежит расширенный markdown. + +Ниже описаны правила оформления и синтаксиса, которые отличаются от стандартного markdown и github-flavoured markdown. + +Расширения синтаксиса предоставляются связкой: + +- `zensical` (документация: ) +- `pymdown-extensions` (документация: ) + +Ниже только необходимые и достаточные правила: + +- для качественной документации; +- хорошего человеческого восприятия; +- корректного формирования документации без ошибок. + +Применение этих подходов необязательно, но требования к каждому требуется соблюдать строго. + +Если приведены ссылки на документацию, можешь использовать их для получения актуальной информации. +Там так же могут быть описаные дополнительные приёмы для работы с документами. + +### Frontmatter + +Каждый документ должен начинаться с этого блока метаданных. + +После frontmatter должна быть пустая строка. + +Внутри должен быть валидный yaml. +Часто используются следующие опциональные параметры (* — желательны): + +- *`title` — укорочечнное название документа для отображения в навигации (умолчание — заголовок 1 уровня) +- *`description` — небольшое осмысленное описание документа (умолчание — пусто) +- *`icon` — код иконки для отображения в навигации рядом с названием (умолчание — пусто) +- *`tags` — массив ключевых слов (тегов), описывающих документ (умолчание — пусто) +- `hide` — массив кодов элементов, которые нужно скрыть на странице документа: + - `navigation` — главная навигация (слева) + - `toc` — содержание страницы (справа) + - `path` — хлебные крошки (сверху) +- `status` — статус страницы (добавляет к пункту навигации слева иконку с подсказкой) + - `new` — новая информация + - `deprecated` — устаревшая информация + - `beta` — информация о нестабильном функционале + +Параметр `title` не должен быть равен заголовку первого уровня. +В таком случае `title` следует убрать или не добавлять. + +### Заголовки + +На странице должен быть только один заголовок 1 уровня — сразу после Frontmatter. + +До и после каждого заголовка должна быть 1 пустая строка. + +### Абзацы + +До и после каждого абзаца должна быть 1 пустая строка. + +Каждое предложение внутри абзаца должно быть на новой строке. + +### Списки + +Вложенные уровни отступаются на 4 пробела слева. + +До и после каждого списка должна быть 1 пустая строка. + +Ненумерованные списки начинаются с `-`. + +### Многострочные блоки кода + +До и после каждого блока кода должна быть 1 пустая строка. + +Каждый блок кода в заголовке может иметь атрибуты: + +- `title="..."` — заголовок блока (например, название файла) +- `hl_lines="..."` — подсветка срок: номера через пробел и/или диапазоны через `-` +- `linenums="N"` — включить нумерацию строк, отсчитывая с указанного числа `N` + +В конце строк внутри блока может быть любое число в формате `#(X)!` — это кликальбельные аннотации, содержимое которых будет взято из ближайшего нумерованного списка. + +Полный пример: + +```yaml title="config.yaml" hl_lines="6 8-10 13 17-20" linenums="1" +context: + - provider: code + # - provider: docs # сломан + - provider: diff #(2)! + - provider: terminal + - provider: problems + - provider: folder + - provider: codebase + params: + nFinal: 10 + # - provider: file + # - provider: url + # - provider: search #(1)! +``` + + 1. Подсказка 1 + 2. **Подсказка** 2 + +### Врезки + +Позволяют акцентировать внимание на ключевых моментах, выделяя блок цветом и иконкой. + +Документация: + +Синтаксис: + +``` +!!! <тип> "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + +??? <тип> "Заголовок разворачиваемой врезки" + Содержимое, которое может быть многострочным + и свёрнуто по умолчанию, но разворачивается по клику на заголовке + +???+ <тип> "Заголовок сворачиваемой врезки" + Содержимое, которое может быть многострочным + и развёрнуто по умолчанию, но сворачивается по клику на заголовке +``` + +Типы, их цвета и пиктограммы: + +| Тип | Цвет | Пиктограмма | +| ---------- | ------- | ------------------ | +| `note` | #448aff | карандаш в круге | +| `abstract` | #00b0ff | планшет для бумаги | +| `info` | #00b8d4 | `i` в круге | +| `tip` | #00bfa5 | пламя | +| `success` | #00c853 | галочка | +| `question` | #64dd17 | `?` в круге | +| `warning` | #ff9100 | `!` в треугольнике | +| `failure` | #ff5252 | крестик | +| `danger` | #ff1744 | молния в круге | +| `bug` | #f50057 | жук на щите | +| `example` | #7c4dff | пробирка | +| `quote` | #9e9e9e | двойная кавычка | + +Заголовок может быть пустым, в этом случае: + +- после типа указываются пустые двойные кавычки (иначе подставится название типа с заглавной буквы на английском языке) +- содержимое внутри блока обрамлён цветом своего типа + +Если текста внутри врезки нет, отображается только яркий заголовок с иконкой. + +Содержимое врезки отступается минимум на 4 пробела. +Содержимое без отступа (в начале строки) находится вне врезки. + +Для содержимого врезки распространяются все те же markdown-правила, включая указанные в этом документе. + +До и после каждой врезки должна быть 1 пустая строка. + +### Сниппеты + +Это переиспользуемые блоки markdown/html, хранящиеся в файлах. + +- Директория: `snippets` в корне проекта +- Документация: + +Как использовать: + +1. создать файл с директории +2. наполнить содержимым +3. во всех местах документации вставить: + - пустая строка + - `--8<-- "filename.md"` + - пустая строка +4. если файлов несколько, вставить следующим образом: + - пустая строка + - `--8<--` + - `"filename1.md"` + - пустая строка + - `"filename2.md"` + - `--8<--` + - пустая строка + +### Иконки + +Каждая иконка определяется своим идентификатором, который делится на две части: код набора и код иконки. + +Внутри frontmatter (параметр `icon`) используется формат: `набор/иконка` + +В тексте документа используется формат: `:набор-иконка:` + +Если иконка в начале строки, пробел ставится только после неё. +Если иконка в середине строки, пробелы ставятся до и после неё. +Если иконка в конце строки, пробел ставятся только до неё. + +Доступны 4 встроенных набора иконок: + +| Название | Код набора | Ссылка | Путь в проекте | +| --------------- | ------------- | ---------------------------------------------- | --------------------------- | +| Lucide | `lucide` | | - | +| Material Design | `material` | | - | +| FontAwesome | `fontawesome` | | - | +| Octicons | `octicons` | | - | +| Simple Icons | `material` | | - | +| VSCode Codicons | `vscode` | | `./overrides/.icons/vscode` | + +Полный список названий иконок здесь: + +Получить полный список иконок в этих наборах можно прочитав содержимое указанных директорий в проекте. + +### Гриды (карточки) + +Грид позволяет разместить короткие предложения в формате динамических карточек. + +Он выглядит как markdown-список, обрамлённый в `
`. +До открывающего и после закрывающего тегов должна быть 1 пустая строка. + +Пример простого грида с компактными карточками: + +``` +
+- :fontawesome-brands-html5: Карточка №1 +- :fontawesome-brands-js: Карточка №2 +- :fontawesome-brands-css3: Карточка №3 +- :fontawesome-brands-internet-explorer: Карточка №4 +
+``` + +Пример грида с многострочными карточками: + +``` +
+- :fontawesome-brands-html5: **Заголовок карточки №1** + + --- + + Многострочное содержимое карточки №1 + +- :fontawesome-brands-js: **Заголовок карточки №2** + + --- + + Многострочное содержимое карточки №2 + +- :fontawesome-brands-css3: **Заголовок карточки №3** + + --- + + Многострочное содержимое карточки №3 + +- :fontawesome-brands-internet-explorer: **Заголовок карточки №4** + + --- + + Многострочное содержимое карточки №4 +
+``` + +### Вкладки (табы) + +Позволяют уместить информацию на одном уровне, не растягивая страницу по высоте. + +Синтаксис: + +``` +=== "Заголовок вкладки 1" + Содержимое вкладки 1 + +=== "Заголовок вкладки 2" + Содержимое вкладки 2 +``` + +Содержимое вкладки отступается минимум на 4 пробела. +Содержимое без отступа (в начале строки) находится вне вкладки. + +Для содержимого вкладки распространяются все те же markdown-правила, включая указанные в этом документе. + +До и после каждого заголовка вкладки должна быть 1 пустая строка. + +После содержимого последней вкладки должна быть 1 пустая строка. + +### Сноски + +Сноска позволяет добавить надстрочный индекс к слову, чтобы вынести пояснения в конец страницы, быстро переместиться к нему по клику на индекс и вернуться обратно. + +Синтаксис: + +``` +Lorem[^1] ipsum[^2] dolor sit amet, consectetur adipiscing elit. + +[^1]: однострочная сноска +[^2]: + многострочная сноска + с отступом 4 пробела слева + на каждой строке +``` + +### Подсказки (тултипы) и аббревиатуры + +Они появляются при наведении мыши на какой-либо элемент на странице документа. + +Пример 1: иконка с подсказкой: +`:material-information-outline:{ title="текст подсказки" }` + +Пример 2: ссылка с подсказкой: +`[Hover me](https://example.com "I'm a tooltip!")` + +Пример 3: альтернативная ссылка с подсказкой: + +``` +[Hover me][example] + + [example]: https://example.com "I'm a tooltip!" +``` + +### Горячие клавиши + +В общем случае, для указания корячих клавиш следует использовать тег ``. +Примеры: `B`, `Esc` + +Для описания комбинаций клавиш следует вставлять между каждой клавишей знак `+`, обрамлённый пробелами. +Примеры: `Shift + A`, `Ctrl + K + 4` + +Для MacOS-специфичных тем вставлять `+` не нужно. +Примеры: `C`, `P` + +Сопоставление пиктограмм с названиями клавиш (служебных и модификаторов) MacOS: + +- Базовые модификаторы: + - `⌘` - `Command` (`Cmd`) + - `⌥` - `Option` (`Alt`) + - `⌃` - `Control` (`Ctrl`) + - `⇧` - `Shift` + - `⇪` - `Caps Lock` +- Навигация и управление: + - `⌫` - `Delete` (Backspace, удаление символа слева) + - `⌦` - `Forward Delete` (удаление символа справа, `Fn` + D`elete) + - `⏎` - `Return` (`Enter`) + - `⌕` - `Enter` на цифровой клавиатуре (в некоторых шрифтах) + - `⎋` - `Escape` (`Esc`) + - `⇥` - `Tab` (Табуляция) + - `⇤` - `Backtab` (`Shift` + `Tab`) + - `␣` - `Space` (Пробел) +- Перемещение по тексту: + - `↖` - `Home` (Начало документа, `Fn` + `←`) + - `↘` - `End` (Конец документа, `Fn` + `→`) + - `⇞` - `Page Up` (Страница вверх, `Fn` + `↑`) + - `⇟` - `Page Down` (Страница вниз, `Fn` + `↓`) +- Специальные и системные: + - `🌐` / `fn` — Функция (`Fn` / Кнопка смены языка/вызова эмодзи) + - `⏏` — `Eject` (Извлечение диска) + +### Кнопки + +- `[Серая кнопка](https://example.com/){ .md-button }` +- `[Синяя кнопка](https://example.com/){ .md-button .md-button--primary }` +- `[:fontawesome-solid-paper-plane: Кнопка серая с иконкой](https://example.com/){ .md-button }` +- `[:fontawesome-solid-paper-plane: Кнопка синяя с иконкой](https://example.com/){ .md-button .md-button--primary }` diff --git a/.gitignore b/.gitignore index 4cf203a..5b28ba5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ -/.cache -/site +/.cache/ +/site/ +/__pycache__/ .DS_Store diff --git a/.kodarules b/.kodarules new file mode 100644 index 0000000..9eecc2d --- /dev/null +++ b/.kodarules @@ -0,0 +1,25 @@ +- Всегда используй навык koda-zensical +- Всегда перечитывай файлы перед каждым изменением - пользователь уже мог внести изменения +- При изменениях структуры проекта всегда актуализируй AGENTS.md +- | + В структуре навигации файла `zensical.toml` всегда должен присутствовать закомментированный раздел `Debug`. + Это отладочные страницы с примерами, которые не должны попасть в итоговую документацию. + Этот раздел раскомментируется вручную по необходимости. +- | + Для отладки используй команду `make site`. + В выводе команды могу быть предупреждения и ошибки в следующем формате: + + ``` + Warning: page does not exist + ╭─[ test.md:695:10 ] + │ + 695 │ - [Edit](../edit/how-to-use-it.md) — редактирование кода + │ ────────────┬─────────── + │ ╰───────────── page does not exist + ─────╯ + ``` + что означает буквально следующее: "в файле content/test.md в строке 695 в позиции 10 есть ссылка на несуществующую страницу." + Эти предупреждения надо всегда исправлять. + +- При изменениях структуры проекта и только при корректной сборке (без предупреждений и ошибок) всегда актуализируй `./AGENTS.md` +- При доработке или расширении функционала этого проекта или синтаксиса всегда актуализируй скилл `./.agents/skills/koda-zensical` diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..afcfe0a --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "0x10.mkdocs-material-preview" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9a3098a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "*.md": "python-markdown" + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..c814c6d --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,22 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Живой предпросмотр (localhost:8000)", + "type": "shell", + "command": "make live" + }, + { + "label": "Собрать статический сайт (./site)", + "type": "shell", + "command": "make site" + }, + { + "label": "Собрать docker-образ со стат. сайтом", + "type": "shell", + "command": "make image" + } + ] +} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..615a017 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,129 @@ +# KODA.md — контекст проекта + +## Обзор проекта + +Бойлерплейт для документации на базе [Zensical](https://zensical.org) — системы документации, построенной на MkDocs Material. +Проект предназначен для быстрого старта документации к любому продукту или сервису: от локальной разработки с live-предпросмотром до сборки Docker-образа со статическим сайтом на nginx. + +### Технологии + +- **Zensical** — движок документации (форк MkDocs Material) +- **Docker** — контейнерная сборка и деплой +- **nginx:alpine** — раздача статического сайта +- **Python** — кастомный плагин `inline_badges.py` (inline-бейджи через HTML-комментарии) +- **TOML** — конфигурация проекта (`zensical.toml`) + +### Архитектура + +Проект использует двухэтапную сборку Docker-образа: + +1. **Builder** (`zensical/zensical:latest`) — собирает статический сайт из Markdown-файлов в `content/` +2. **Runtime** (`nginx:alpine`) — раздаёт готовый статический сайт на порту 80 + +Вся разработка ведётся через Docker — локальная установка Zensical не требуется. + +## Структура проекта + +``` +content/ — исходные страницы документации (.md) + index.md — главная страница + part1/ — пример раздела с вложенными страницами + sandbox.md — песочница с примерами синтаксиса (отладочная) + vscode-icons.md — справочник VSCode-иконок (отладочная) + _asseets/ — assets (изображения, стили, скрипты) +snippets/ — переиспользуемые блоки markdown + abbr.md — аббревиатуры + coming_soon.md — заглушка «скоро появится» + config_file_path.md — пример сниппета с путями конфигурации +overrides/ — кастомизация темы Zensical + .icons/ — кастомные наборы иконок (vscode/) +zensical.toml — конфигурация проекта (тема, навигация, расширения) +inline_badges.py — Python-плагин для inline-бейджей +Dockerfile — многоэтапная сборка: zensical build → nginx +Makefile — команды для разработки и деплоя +CONTRIBUTING.md — правила контрибуции +.editorconfig — настройки редактора (отступы, кодировка, переносы) +.dockerignore — исключения для Docker-контекста +.kodarules — правила для AI-ассистента +``` + +## Сборка и запуск + +Все команды выполняются через `make` (требуется установленный Docker). + +| Команда | Описание | +| ------------ | --------------------------------------------------------------------- | +| `make live` | Запуск в режиме живой перезагрузки на `http://localhost:8000` | +| `make site` | Генерация статического сайта с валидацией ссылок и якорей | +| `make image` | Сборка Docker-образа `harbor.example.com/boilerplate-docs:latest` | +| `make run` | Запуск контейнера из образа на `http://localhost:8001` | +| `make push` | Загрузка Docker-образа в реестр `harbor.example.com` | +| `make help` | Справка по командам (цель по умолчанию) | + +### Валидация + +При сборке (`make site`) включена валидация: + +- битые ссылки (`invalid_links = true`) +- битые якоря (`invalid_link_anchors = true`) + +Предупреждения и ошибки валидации необходимо исправлять перед отправкой изменений. + +## Конфигурация + +### zensical.toml + +Основной конфигурационный файл. Ключевые настройки: + +- **Документация:** `content/`, вывод в `site/` +- **Тема:** Material с поддержкой светлой/тёмной тем, шрифты Inter / JetBrains Mono +- **Навигация:** табы, секции, хлебные крошки, кнопка «наверх», прошлый/следующий документ +- **Расширения Markdown:** admonition, tabs, superfences, snippets, footnotes, emoji, highlight, inline badges +- **Иконки:** Lucide, Material Design, FontAwesome, Octicons, Simple Icons, VSCode Codicons (кастомные) +- **Теги:** настроены иконки для HTML, JS, CSS, VSCode, JetBrains, CLI, AI/LLM +- **Социальные ссылки:** Telegram, YouTube, GitHub (в футере) +- **Debug-раздел:** закомментированный блок в `nav` для отладочных страниц (`sandbox.md`, `vscode-icons.md`) + +### inline_badges.py + +Кастомный Python-плагин для Markdown. Преобразует HTML-комментарии в бейджи: + +- `` — бейдж версии с иконкой `material/tag-outline` +- `` — бейдж значения по умолчанию с иконкой `material/water` +- `` — бейдж экспериментального функционала с иконкой `material/test-tube` + +## Правила разработки + +### Стиль и форматирование + +- Кодировка UTF-8, переносы строк LF +- Отступы: 4 пробела (2 для YAML/YML, табы для Makefile) +- В Markdown-файлах завершающие пробелы не обрезаются +- В остальных файлах — обрезаются +- В конце файла — пустая строка + +### Документация + +- Язык документации — русский +- Обращение к пользователю на «вы» +- Простой и понятный язык, активный залог +- Каждый документ начинается с frontmatter (YAML с метаданными) +- На странице — один заголовок 1 уровня +- До и после заголовков, абзацев, списков, блоков кода, врезок — пустая строка +- Вложенные уровни списков отступаются на 4 пробела +- Ненумерованные списки начинаются с `-` +- Подробные правила синтаксиса — в скилле `.agents/skills/koda-zensical` + +### Отладка + +- Для отладки использовать `make site` и проверять вывод на предупреждения +- Debug-страницы (`sandbox.md`, `vscode-icons.md`) не должны попадать в навигацию — раздел `Debug` в `zensical.toml` закомментирован +- Раскомментирование `Debug` выполняется вручную по необходимости + +### Контрибуция + +Подробные правила — в [CONTRIBUTING.md](CONTRIBUTING.md). + +## Лицензия + +MIT License diff --git a/Dockerfile b/Dockerfile index fc33a01..9a4edda 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,21 @@ -FROM squidfunk/mkdocs-material AS builder +FROM zensical/zensical:latest AS builder +ENV PYTHONPATH=/docs COPY . /docs -RUN mkdocs build +RUN zensical build --clean + +FROM nginx:alpine AS boilerplate-docs + +# LABEL org.opencontainers.image.revision="c76960ef08be04f397b72702eca4166c7b783176" +# LABEL org.opencontainers.image.description="Documentation for our services and products" +# LABEL org.opencontainers.image.url="https://example.com" +# LABEL org.opencontainers.image.vendor="Boilerplate" +# LABEL org.opencontainers.image.documentation="https://example.com" +# LABEL org.opencontainers.image.version="v0.0.46" +# LABEL org.opencontainers.image.created="2026-06-21T18:47:29.228Z" +# LABEL org.opencontainers.image.licenses="MIT" +# LABEL org.opencontainers.image.title="BoilerplateDocs" +# LABEL org.opencontainers.image.source="" -FROM nginx:alpine AS iptv-docs COPY --from=builder /docs/site /usr/share/nginx/html WORKDIR /usr/share/nginx/html USER root diff --git a/Makefile b/Makefile index bd01222..6468c20 100644 --- a/Makefile +++ b/Makefile @@ -1,47 +1,54 @@ .DEFAULT_GOAL := help -.PHONY: live site image run help +.PHONY: live site image push run help -## live: Run mkdocs with live-reloading (localhost:3000) +## live = Run zensical with live-reloading on http://localhost:8000 live: - @echo "Wait until container starts and open http://localhost:3000 to see live preview" - @docker run \ - --pull always \ + @echo "*** Wait until container starts and open http://localhost:8000 to see live preview" + @docker stop boilerplate-docs-dev 2>/dev/null; \ + docker run \ --rm \ --interactive \ --tty \ - --publish 3000:8000 \ + --env PYTHONPATH=/docs \ + --publish 8000:8000 \ --volume ${PWD}:/docs \ - --name my-project-docs-dev \ - squidfunk/mkdocs-material:9.6.20 + --name boilerplate-docs-dev \ + zensical/zensical:latest -## site: Build local static site +## site = Build a local static site site: - @echo "Wait until mkdocs finish" - @docker run \ + @echo "*** Wait until zensical finish" + @docker stop boilerplate-docs-dev 2>/dev/null; \ + docker run \ --pull always \ --rm \ - --interactive \ - --tty \ + --env PYTHONPATH=/docs \ --volume ${PWD}:/docs \ - --name my-project-docs-dev \ - squidfunk/mkdocs-material:9.6.20 build + --name boilerplate-docs-dev \ + zensical/zensical:latest \ + build \ + --clean -## image: Build docker image +## image = Build a docker image image: - @docker build \ - --tag my-project-docs-dev:latest \ - . + @docker build --tag harbor.example.com/boilerplate-docs:latest . -## run: Run docker image (localhost:3001) +## run = Run docker container from image built with `make image` on http://localhost:8001 run: - @echo "Wait until container starts and open http://localhost:3001 to see ready static website" - @docker run \ + @echo "*** Wait until container starts and open http://localhost:8001 to see ready static website" + @docker stop boilerplate-docs 2>/dev/null; \ + docker run \ --rm \ - --publish 3001:80 \ - --name my-project-docs-dev \ - my-project-docs-dev:latest + --publish 8001:80 \ + --name boilerplate-docs \ + harbor.example.com/boilerplate-docs:latest -## help: Show this message and exit +## push = Push docker image built with `make image` to harbor.example.com +push: + @docker login harbor.example.com; \ + docker push harbor.example.com/boilerplate-docs:latest + +## help = Show this message and exit (default) help: Makefile @echo "Available recipes:" - @sed -n 's/^##/ /p' $< | column -t -s ':' + @sed -n 's/^##/ /p' $< | column -t -s '=' diff --git a/README.md b/README.md index a6c5535..4e3d90e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,54 @@ -# Пример документации к проекту +# Документация к проекту -* `make live` -- запуск в режиме живой перезагрузки для отладки -* `make site` -- генерация статического сайта -* `make image` -- генерация docker-образа -* `make run` -- запуск контейнера из docker-образа -* `make help` -- справка по командам +Бойлерплейт для документации на базе [Zensical](https://zensical.org) — системы документации, построенной на MkDocs Material. + +## Возможности + +- Live-предпросмотр с автоматической перезагрузкой +- Сборка статического сайта в Docker-образ на базе nginx +- Светлая и тёмная темы оформления +- Расширенный Markdown: врезки, вкладки, гриды, сноски, иконки +- Валидация ссылок и якорей при сборке +- Поддержка сниппетов и переиспользуемых блоков +- Кастомные inline-бейджи через `inline_badges.py` + +## Структура проекта + +``` +content/ — исходные страницы документации (.md) +snippets/ — переиспользуемые блоки markdown +overrides/ — кастомизация темы: иконки, шаблоны, стили +zensical.toml — конфигурация проекта +inline_badges.py — плагин inline-бейджей +Dockerfile — многоэтапная сборка: zensical build → nginx +Makefile — команды для разработки и деплоя +``` + +## Быстрый старт + +### Требования + +- [Docker](https://docs.docker.com/get-docker/) + +### Команды + +| Команда | Описание | +| ------------ | --------------------------------------------------------------- | +| `make live` | Запуск в режиме живой перезагрузки на `http://localhost:8000` | +| `make site` | Генерация статического сайта (с валидацией ссылок и якорей) | +| `make image` | Сборка Docker-образа | +| `make run` | Запуск контейнера на `http://localhost:8001` | +| `make push` | Загрузка Docker-образа в реестр | +| `make help` | Справка по командам (по умолчанию) | + +## Разработка + +Для локальной отладки используйте `make live` — откройте `http://localhost:8000` после запуска контейнера. + +Для проверки сборки без предупреждений используйте `make site`. + +Подробности о форматировании и стиле — в [CONTRIBUTING.md](CONTRIBUTING.md). + +## Лицензия + +MIT License diff --git a/content/glossary.md b/content/glossary.md deleted file mode 100644 index b29fdd7..0000000 --- a/content/glossary.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Глоссарий терминов -icon: material/format-text ---- - -# Глоссарий терминов - -Справочник терминов, используемых в документации Koda. - -## A - -**Agent (Агент)** — режим работы Koda, в котором AI самостоятельно выполняет многошаговые задачи, используя различные инструменты. - -**API Key (API-ключ)** — уникальный ключ для доступа к API провайдера моделей (OpenAI, Anthropic и др.). - -**Autocomplete (Автодополнение)** — режим автоматического предложения продолжения кода при наборе. - -## C - -**Chat (Чат)** — режим диалога с AI-моделью для решения задач, объяснения кода и получения рекомендаций. - -**Completion** — см. Autocomplete. - -**Config (Конфигурация)** — файл настроек Koda (`config.yaml`), определяющий модели, провайдеров и параметры. - -**Context (Контекст)** — информация, которую Koda использует для генерации ответов (файлы, код, документация). - -**Context Provider (Контекстный провайдер)** — компонент, автоматически добавляющий релевантную информацию в запросы через символ @ (file, code, docs, codebase, diff, terminal и др.). Подробнее в [Контекст-провайдеры](context-providers.md). - -## D - -**Diff (Дифф)** — разница между двумя версиями файла, показывающая изменения. - -## E - -**Edit (Редактирование)** — режим изменения выделенного кода по инструкции пользователя. - -**Embeddings (Эмбеддинги)** — векторные представления текста для поиска по семантическому сходству. - -## F - -**FIM (Fill-In-Middle)** — техника автодополнения, когда модель заполняет текст между префиксом и суффиксом. - -## I - -**Indexing (Индексация)** — процесс анализа и векторизации кодовой базы или документации для быстрого поиска. - -## L - -**LLM (Large Language Model)** — большая языковая модель, используемая для генерации текста и кода. - -## M - -**Model (Модель)** — AI-модель, используемая для генерации ответов (GPT-4, Claude, Llama и др.). - -**Model Role (Роль модели)** — назначение модели в Koda (chat, edit, agent, autocomplete, embed, rerank). - -## P - -**Provider (Провайдер)** — сервис, предоставляющий доступ к AI-моделям (OpenAI, Anthropic, Ollama и др.). - -**Prompt (Промпт)** — текстовый запрос к AI-модели. - -## R - -**RAG (Retrieval-Augmented Generation)** — техника генерации ответов с использованием поиска по внешней базе знаний. - -**Retrieval (Поиск)** — режим поиска по документации и другим источникам информации. - -**Roles (Роли)** — см. Model Role. - -## S - -**Session (Сессия)** — отдельный диалог в чате Koda со своей историей и контекстом. - -**Session History (История сессий)** — список всех предыдущих сессий с возможностью поиска, переключения и удаления. - -**Session Metadata (Метаданные сессии)** — информация о сессии: ID, заголовок, дата создания, режим работы, рабочая директория. - -**Session Storage (Хранилище сессий)** — место сохранения данных сессий (локальные файлы `~/.koda/sessions/` или серверное хранилище). - -**Summarization (Суммаризация)** — процесс сжатия длинной истории диалога в краткое содержание для экономии токенов. - -**SummaryMarker (Маркер суммаризации)** — визуальный индикатор в истории чата, показывающий где была применена суммаризация. - -**Auto-Summarize (Автосуммаризация)** — автоматическая суммаризация при достижении 75% использования контекста (только Agent режим). - -**Skill (Навык)** — переиспользуемый набор инструкций для AI-модели, хранящийся в отдельном файле. - -**Slash Command (Slash-команда)** — специальная команда, начинающаяся с @ (например, /share, /commit, /summarize). - -## T - -**Token (Токен)** — единица измерения длины текста для AI-моделей (примерно ¾ слова). - -**Tool (Инструмент)** — действие, которое агент может выполнить (читать файл, редактировать код, запускать команду). - -## V - -:material-microsoft-visual-studio-code: **VS Code** — Visual Studio Code, среда разработки от Microsoft. - -## W - -**Workspace (Рабочая область)** — проект или директория, открытая в IDE. - -## Ё - -**Ёфикация** — использование буквы "ё" вместо "е" в русских текстах документации. - ---- - -## Сокращения - -| Сокращение | Расшифровка | -|------------|-------------| -| AI | Artificial Intelligence (Искусственный интеллект) | -| API | Application Programming Interface | -| IDE | Integrated Development Environment | -| LLM | Large Language Model | -| [RAG] | Retrieval-Augmented Generation | -| :material-microsoft-visual-studio-code: VS Code | Visual Studio Code | -| FIM | Fill-In-Middle | - ---- - -## Дополнительные ресурсы - -- [Основная документация](README.md) -- [Режимы работы](modes.md) -- [Инструменты агента](agent-tools.md) diff --git a/content/sandbox.md b/content/sandbox.md new file mode 100644 index 0000000..dcedf69 --- /dev/null +++ b/content/sandbox.md @@ -0,0 +1,284 @@ +# Песочница + + + +## Мелочёвка + +=== "Frontmatter" + + ```yaml + --- + title: My Page + description: Some page description + icon: material/star + tags: [tag1, tag2] + hide: [navigation, toc, path] + status: new + #status: deprecated + #status: beta + --- + + # My Super-Duper Page + + # Markdown content goes here + ``` + +=== "Бейджи" + + + +=== "Тултипы" + + :material-information-outline:{ title="текст подсказки" } + + [Hover me 1](https://example.com "I'm first tooltip!") + + [Hover me 2][example] + + [example]: https://example.com "I'm second tooltip!" + +=== "Кнопки" + + [Серая кнопка](https://example.com/){ .md-button } + + [Синяя кнопка](https://example.com/){ .md-button .md-button--primary } + + [:fontawesome-solid-paper-plane: Кнопка серая с иконкой и подсказкой](https://example.com/){ .md-button title="текст подсказки 2" } + + [:fontawesome-solid-paper-plane: Кнопка синяя с иконкой](https://example.com/){ .md-button .md-button--primary } + +--- + +=== "Простой блок" + + ```python + def _render_icon(shortcode: str, md) -> str: + emoji_pattern = md.inlinePatterns.get("emoji") + if emoji_pattern is None: + return escape(shortcode) + ``` + +=== "С аннотациями" + + ```python + def _render_icon(shortcode: str, md) -> str: #(1)! + emoji_pattern = md.inlinePatterns.get("emoji") #(2)! + if emoji_pattern is None: + return escape(shortcode) #(3)! + ``` + + 1. сигнатура функции + 2. инициализация переменной + 3. возврат результата + +=== "С заголовком" + + ```python title="example.py" + def _render_icon(shortcode: str, md) -> str: + emoji_pattern = md.inlinePatterns.get("emoji") + if emoji_pattern is None: + return escape(shortcode) + ``` + +=== "С нумерацией с 5" + + ```python linenums="5" + def _render_icon(shortcode: str, md) -> str: + emoji_pattern = md.inlinePatterns.get("emoji") + if emoji_pattern is None: + return escape(shortcode) + ``` + +=== "С выделением" + + ```python linenums="1" hl_lines="2-5 8 9 22" + def _render_icon(shortcode: str, md) -> str: + try: + emoji_pattern = md.inlinePatterns["emoji"] + except KeyError: + return escape(shortcode) + + icon = emoji_pattern.emoji_index["emoji"].get(shortcode) + if icon is None: + return escape(shortcode) + + element = emoji_pattern.generator( + emoji_pattern.emoji_index["name"], + shortcode, + None, + None, + shortcode, + "", + icon.get("category", ""), + emoji_pattern.options, + md, + ) + return tostring(element, encoding="unicode", method="html") + ``` + +--- + +## Врезки + +=== "Полные" + + !!! note "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! abstract "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! info "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! tip "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! success "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! question "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! warning "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! failure "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! danger "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! bug "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! example "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + + !!! quote "Заголовок статичной врезки" + Содержимое, которое может + быть многострочным + +=== "Свёрнутые" + + ??? note "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? abstract "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? info "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? tip "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? success "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? question "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? warning "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? failure "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? danger "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? bug "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? example "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + + ??? quote "Заголовок свёрнутой врезки" + Содержимое, которое может + быть многострочным + +=== "Сворачиваемые" + + ???+ note "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ abstract "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ info "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ tip "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ success "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ question "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ warning "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ failure "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ danger "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ bug "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ example "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + + ???+ quote "Заголовок развёрнутой врезки" + Содержимое, которое может + быть многострочным + +=== "Короткие" + + !!! note + Дефолтный заголовок + + !!! abstract "" + Пустой заголовок + + !!! info "Пустое содержимое" + + +--- diff --git a/content/tags.md b/content/tags.md deleted file mode 100644 index 15396cd..0000000 --- a/content/tags.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Теги -icon: material/tag-text ---- - -# Теги документации - -Здесь перечислены все теги, которые встречаются на страницах документации. - -Нажмите на ссылку для перехода к странице, которая содержит тег. - ---- - - diff --git a/content/vscode-icons.md b/content/vscode-icons.md index 4cd0b11..b37a02e 100644 --- a/content/vscode-icons.md +++ b/content/vscode-icons.md @@ -1,549 +1,550 @@ -| asdf | asdf | -|---|---| -| :vscode-account: | `:vscode-account:` | -| :vscode-activate-breakpoints: | `:vscode-activate-breakpoints:` | -| :vscode-add: | `:vscode-add:` | -| :vscode-add-small: | `:vscode-add-small:` | -| :vscode-agent: | `:vscode-agent:` | -| :vscode-archive: | `:vscode-archive:` | -| :vscode-arrow-both: | `:vscode-arrow-both:` | -| :vscode-arrow-circle-down: | `:vscode-arrow-circle-down:` | -| :vscode-arrow-circle-left: | `:vscode-arrow-circle-left:` | -| :vscode-arrow-circle-right: | `:vscode-arrow-circle-right:` | -| :vscode-arrow-circle-up: | `:vscode-arrow-circle-up:` | -| :vscode-arrow-down: | `:vscode-arrow-down:` | -| :vscode-arrow-left: | `:vscode-arrow-left:` | -| :vscode-arrow-right: | `:vscode-arrow-right:` | -| :vscode-arrow-small-down: | `:vscode-arrow-small-down:` | -| :vscode-arrow-small-left: | `:vscode-arrow-small-left:` | -| :vscode-arrow-small-right: | `:vscode-arrow-small-right:` | -| :vscode-arrow-small-up: | `:vscode-arrow-small-up:` | -| :vscode-arrow-swap: | `:vscode-arrow-swap:` | -| :vscode-arrow-up: | `:vscode-arrow-up:` | -| :vscode-ask: | `:vscode-ask:` | -| :vscode-attach: | `:vscode-attach:` | -| :vscode-azure: | `:vscode-azure:` | -| :vscode-azure-devops: | `:vscode-azure-devops:` | -| :vscode-beaker: | `:vscode-beaker:` | -| :vscode-beaker-stop: | `:vscode-beaker-stop:` | -| :vscode-bell: | `:vscode-bell:` | -| :vscode-bell-dot: | `:vscode-bell-dot:` | -| :vscode-bell-slash: | `:vscode-bell-slash:` | -| :vscode-bell-slash-dot: | `:vscode-bell-slash-dot:` | -| :vscode-blank: | `:vscode-blank:` | -| :vscode-bold: | `:vscode-bold:` | -| :vscode-book: | `:vscode-book:` | -| :vscode-bookmark: | `:vscode-bookmark:` | -| :vscode-bracket-dot: | `:vscode-bracket-dot:` | -| :vscode-bracket-error: | `:vscode-bracket-error:` | -| :vscode-briefcase: | `:vscode-briefcase:` | -| :vscode-broadcast: | `:vscode-broadcast:` | -| :vscode-browser: | `:vscode-browser:` | -| :vscode-bug: | `:vscode-bug:` | -| :vscode-build: | `:vscode-build:` | -| :vscode-calendar: | `:vscode-calendar:` | -| :vscode-call-incoming: | `:vscode-call-incoming:` | -| :vscode-call-outgoing: | `:vscode-call-outgoing:` | -| :vscode-case-sensitive: | `:vscode-case-sensitive:` | -| :vscode-chat-export: | `:vscode-chat-export:` | -| :vscode-chat-import: | `:vscode-chat-import:` | -| :vscode-chat-sparkle: | `:vscode-chat-sparkle:` | -| :vscode-chat-sparkle-error: | `:vscode-chat-sparkle-error:` | -| :vscode-chat-sparkle-warning: | `:vscode-chat-sparkle-warning:` | -| :vscode-check: | `:vscode-check:` | -| :vscode-check-all: | `:vscode-check-all:` | -| :vscode-checklist: | `:vscode-checklist:` | -| :vscode-chevron-down: | `:vscode-chevron-down:` | -| :vscode-chevron-left: | `:vscode-chevron-left:` | -| :vscode-chevron-right: | `:vscode-chevron-right:` | -| :vscode-chevron-up: | `:vscode-chevron-up:` | -| :vscode-chip: | `:vscode-chip:` | -| :vscode-chrome-close: | `:vscode-chrome-close:` | -| :vscode-chrome-maximize: | `:vscode-chrome-maximize:` | -| :vscode-chrome-minimize: | `:vscode-chrome-minimize:` | -| :vscode-chrome-restore: | `:vscode-chrome-restore:` | -| :vscode-circle: | `:vscode-circle:` | -| :vscode-circle-filled: | `:vscode-circle-filled:` | -| :vscode-circle-large: | `:vscode-circle-large:` | -| :vscode-circle-large-filled: | `:vscode-circle-large-filled:` | -| :vscode-circle-slash: | `:vscode-circle-slash:` | -| :vscode-circle-small: | `:vscode-circle-small:` | -| :vscode-circle-small-filled: | `:vscode-circle-small-filled:` | -| :vscode-circuit-board: | `:vscode-circuit-board:` | -| :vscode-claude: | `:vscode-claude:` | -| :vscode-clear-all: | `:vscode-clear-all:` | -| :vscode-clippy: | `:vscode-clippy:` | -| :vscode-clockface: | `:vscode-clockface:` | -| :vscode-close: | `:vscode-close:` | -| :vscode-close-all: | `:vscode-close-all:` | -| :vscode-cloud: | `:vscode-cloud:` | -| :vscode-cloud-download: | `:vscode-cloud-download:` | -| :vscode-cloud-small: | `:vscode-cloud-small:` | -| :vscode-cloud-upload: | `:vscode-cloud-upload:` | -| :vscode-code: | `:vscode-code:` | -| :vscode-code-oss: | `:vscode-code-oss:` | -| :vscode-code-review: | `:vscode-code-review:` | -| :vscode-coffee: | `:vscode-coffee:` | -| :vscode-collapse-all: | `:vscode-collapse-all:` | -| :vscode-collection: | `:vscode-collection:` | -| :vscode-collection-small: | `:vscode-collection-small:` | -| :vscode-color-mode: | `:vscode-color-mode:` | -| :vscode-combine: | `:vscode-combine:` | -| :vscode-comment: | `:vscode-comment:` | -| :vscode-comment-discussion: | `:vscode-comment-discussion:` | -| :vscode-comment-discussion-quote: | `:vscode-comment-discussion-quote:` | -| :vscode-comment-discussion-sparkle: | `:vscode-comment-discussion-sparkle:` | -| :vscode-comment-draft: | `:vscode-comment-draft:` | -| :vscode-comment-unresolved: | `:vscode-comment-unresolved:` | -| :vscode-compass: | `:vscode-compass:` | -| :vscode-compass-active: | `:vscode-compass-active:` | -| :vscode-compass-dot: | `:vscode-compass-dot:` | -| :vscode-copilot: | `:vscode-copilot:` | -| :vscode-copilot-blocked: | `:vscode-copilot-blocked:` | -| :vscode-copilot-error: | `:vscode-copilot-error:` | -| :vscode-copilot-in-progress: | `:vscode-copilot-in-progress:` | -| :vscode-copilot-large: | `:vscode-copilot-large:` | -| :vscode-copilot-not-connected: | `:vscode-copilot-not-connected:` | -| :vscode-copilot-snooze: | `:vscode-copilot-snooze:` | -| :vscode-copilot-success: | `:vscode-copilot-success:` | -| :vscode-copilot-unavailable: | `:vscode-copilot-unavailable:` | -| :vscode-copilot-warning: | `:vscode-copilot-warning:` | -| :vscode-copilot-warning-large: | `:vscode-copilot-warning-large:` | -| :vscode-copy: | `:vscode-copy:` | -| :vscode-coverage: | `:vscode-coverage:` | -| :vscode-credit-card: | `:vscode-credit-card:` | -| :vscode-cursor: | `:vscode-cursor:` | -| :vscode-dash: | `:vscode-dash:` | -| :vscode-dashboard: | `:vscode-dashboard:` | -| :vscode-database: | `:vscode-database:` | -| :vscode-debug: | `:vscode-debug:` | -| :vscode-debug-all: | `:vscode-debug-all:` | -| :vscode-debug-alt: | `:vscode-debug-alt:` | -| :vscode-debug-alt-small: | `:vscode-debug-alt-small:` | -| :vscode-debug-breakpoint-conditional: | `:vscode-debug-breakpoint-conditional:` | -| :vscode-debug-breakpoint-conditional-unverified: | `:vscode-debug-breakpoint-conditional-unverified:` | -| :vscode-debug-breakpoint-data: | `:vscode-debug-breakpoint-data:` | -| :vscode-debug-breakpoint-data-unverified: | `:vscode-debug-breakpoint-data-unverified:` | -| :vscode-debug-breakpoint-function: | `:vscode-debug-breakpoint-function:` | -| :vscode-debug-breakpoint-function-unverified: | `:vscode-debug-breakpoint-function-unverified:` | -| :vscode-debug-breakpoint-log: | `:vscode-debug-breakpoint-log:` | -| :vscode-debug-breakpoint-log-unverified: | `:vscode-debug-breakpoint-log-unverified:` | -| :vscode-debug-breakpoint-unsupported: | `:vscode-debug-breakpoint-unsupported:` | -| :vscode-debug-connected: | `:vscode-debug-connected:` | -| :vscode-debug-console: | `:vscode-debug-console:` | -| :vscode-debug-continue: | `:vscode-debug-continue:` | -| :vscode-debug-continue-small: | `:vscode-debug-continue-small:` | -| :vscode-debug-coverage: | `:vscode-debug-coverage:` | -| :vscode-debug-disconnect: | `:vscode-debug-disconnect:` | -| :vscode-debug-line-by-line: | `:vscode-debug-line-by-line:` | -| :vscode-debug-pause: | `:vscode-debug-pause:` | -| :vscode-debug-rerun: | `:vscode-debug-rerun:` | -| :vscode-debug-restart: | `:vscode-debug-restart:` | -| :vscode-debug-restart-frame: | `:vscode-debug-restart-frame:` | -| :vscode-debug-reverse-continue: | `:vscode-debug-reverse-continue:` | -| :vscode-debug-stackframe: | `:vscode-debug-stackframe:` | -| :vscode-debug-stackframe-active: | `:vscode-debug-stackframe-active:` | -| :vscode-debug-start: | `:vscode-debug-start:` | -| :vscode-debug-step-back: | `:vscode-debug-step-back:` | -| :vscode-debug-step-into: | `:vscode-debug-step-into:` | -| :vscode-debug-step-out: | `:vscode-debug-step-out:` | -| :vscode-debug-step-over: | `:vscode-debug-step-over:` | -| :vscode-debug-stop: | `:vscode-debug-stop:` | -| :vscode-desktop-download: | `:vscode-desktop-download:` | -| :vscode-device-camera: | `:vscode-device-camera:` | -| :vscode-device-camera-video: | `:vscode-device-camera-video:` | -| :vscode-device-mobile: | `:vscode-device-mobile:` | -| :vscode-diff: | `:vscode-diff:` | -| :vscode-diff-added: | `:vscode-diff-added:` | -| :vscode-diff-ignored: | `:vscode-diff-ignored:` | -| :vscode-diff-modified: | `:vscode-diff-modified:` | -| :vscode-diff-multiple: | `:vscode-diff-multiple:` | -| :vscode-diff-removed: | `:vscode-diff-removed:` | -| :vscode-diff-renamed: | `:vscode-diff-renamed:` | -| :vscode-diff-single: | `:vscode-diff-single:` | -| :vscode-discard: | `:vscode-discard:` | -| :vscode-download: | `:vscode-download:` | -| :vscode-edit: | `:vscode-edit:` | -| :vscode-edit-code: | `:vscode-edit-code:` | -| :vscode-edit-session: | `:vscode-edit-session:` | -| :vscode-edit-sparkle: | `:vscode-edit-sparkle:` | -| :vscode-editor-layout: | `:vscode-editor-layout:` | -| :vscode-ellipsis: | `:vscode-ellipsis:` | -| :vscode-empty-window: | `:vscode-empty-window:` | -| :vscode-eraser: | `:vscode-eraser:` | -| :vscode-error: | `:vscode-error:` | -| :vscode-error-small: | `:vscode-error-small:` | -| :vscode-exclude: | `:vscode-exclude:` | -| :vscode-expand-all: | `:vscode-expand-all:` | -| :vscode-export: | `:vscode-export:` | -| :vscode-extensions: | `:vscode-extensions:` | -| :vscode-extensions-large: | `:vscode-extensions-large:` | -| :vscode-eye: | `:vscode-eye:` | -| :vscode-eye-closed: | `:vscode-eye-closed:` | -| :vscode-feedback: | `:vscode-feedback:` | -| :vscode-file: | `:vscode-file:` | -| :vscode-file-binary: | `:vscode-file-binary:` | -| :vscode-file-code: | `:vscode-file-code:` | -| :vscode-file-media: | `:vscode-file-media:` | -| :vscode-file-pdf: | `:vscode-file-pdf:` | -| :vscode-file-submodule: | `:vscode-file-submodule:` | -| :vscode-file-symlink-directory: | `:vscode-file-symlink-directory:` | -| :vscode-file-symlink-file: | `:vscode-file-symlink-file:` | -| :vscode-file-text: | `:vscode-file-text:` | -| :vscode-file-zip: | `:vscode-file-zip:` | -| :vscode-files: | `:vscode-files:` | -| :vscode-filter: | `:vscode-filter:` | -| :vscode-filter-filled: | `:vscode-filter-filled:` | -| :vscode-flag: | `:vscode-flag:` | -| :vscode-flame: | `:vscode-flame:` | -| :vscode-fold: | `:vscode-fold:` | -| :vscode-fold-down: | `:vscode-fold-down:` | -| :vscode-fold-up: | `:vscode-fold-up:` | -| :vscode-folder: | `:vscode-folder:` | -| :vscode-folder-active: | `:vscode-folder-active:` | -| :vscode-folder-library: | `:vscode-folder-library:` | -| :vscode-folder-opened: | `:vscode-folder-opened:` | -| :vscode-forward: | `:vscode-forward:` | -| :vscode-game: | `:vscode-game:` | -| :vscode-gear: | `:vscode-gear:` | -| :vscode-gift: | `:vscode-gift:` | -| :vscode-gist: | `:vscode-gist:` | -| :vscode-gist-secret: | `:vscode-gist-secret:` | -| :vscode-git-branch: | `:vscode-git-branch:` | -| :vscode-git-branch-changes: | `:vscode-git-branch-changes:` | -| :vscode-git-branch-conflicts: | `:vscode-git-branch-conflicts:` | -| :vscode-git-branch-staged-changes: | `:vscode-git-branch-staged-changes:` | -| :vscode-git-commit: | `:vscode-git-commit:` | -| :vscode-git-compare: | `:vscode-git-compare:` | -| :vscode-git-fetch: | `:vscode-git-fetch:` | -| :vscode-git-merge: | `:vscode-git-merge:` | -| :vscode-git-pull-request: | `:vscode-git-pull-request:` | -| :vscode-git-pull-request-closed: | `:vscode-git-pull-request-closed:` | -| :vscode-git-pull-request-create: | `:vscode-git-pull-request-create:` | -| :vscode-git-pull-request-done: | `:vscode-git-pull-request-done:` | -| :vscode-git-pull-request-draft: | `:vscode-git-pull-request-draft:` | -| :vscode-git-pull-request-go-to-changes: | `:vscode-git-pull-request-go-to-changes:` | -| :vscode-git-pull-request-new-changes: | `:vscode-git-pull-request-new-changes:` | -| :vscode-git-stash: | `:vscode-git-stash:` | -| :vscode-git-stash-apply: | `:vscode-git-stash-apply:` | -| :vscode-git-stash-pop: | `:vscode-git-stash-pop:` | -| :vscode-github: | `:vscode-github:` | -| :vscode-github-action: | `:vscode-github-action:` | -| :vscode-github-alt: | `:vscode-github-alt:` | -| :vscode-github-inverted: | `:vscode-github-inverted:` | -| :vscode-github-project: | `:vscode-github-project:` | -| :vscode-globe: | `:vscode-globe:` | -| :vscode-go-to-editing-session: | `:vscode-go-to-editing-session:` | -| :vscode-go-to-file: | `:vscode-go-to-file:` | -| :vscode-go-to-search: | `:vscode-go-to-search:` | -| :vscode-grabber: | `:vscode-grabber:` | -| :vscode-graph: | `:vscode-graph:` | -| :vscode-graph-left: | `:vscode-graph-left:` | -| :vscode-graph-line: | `:vscode-graph-line:` | -| :vscode-graph-scatter: | `:vscode-graph-scatter:` | -| :vscode-gripper: | `:vscode-gripper:` | -| :vscode-group-by-ref-type: | `:vscode-group-by-ref-type:` | -| :vscode-heart: | `:vscode-heart:` | -| :vscode-heart-filled: | `:vscode-heart-filled:` | -| :vscode-history: | `:vscode-history:` | -| :vscode-home: | `:vscode-home:` | -| :vscode-horizontal-rule: | `:vscode-horizontal-rule:` | -| :vscode-hubot: | `:vscode-hubot:` | -| :vscode-inbox: | `:vscode-inbox:` | -| :vscode-indent: | `:vscode-indent:` | -| :vscode-index-zero: | `:vscode-index-zero:` | -| :vscode-info: | `:vscode-info:` | -| :vscode-insert: | `:vscode-insert:` | -| :vscode-inspect: | `:vscode-inspect:` | -| :vscode-issue-draft: | `:vscode-issue-draft:` | -| :vscode-issue-reopened: | `:vscode-issue-reopened:` | -| :vscode-issues: | `:vscode-issues:` | -| :vscode-italic: | `:vscode-italic:` | -| :vscode-jersey: | `:vscode-jersey:` | -| :vscode-json: | `:vscode-json:` | -| :vscode-kebab-vertical: | `:vscode-kebab-vertical:` | -| :vscode-key: | `:vscode-key:` | -| :vscode-keyboard-tab: | `:vscode-keyboard-tab:` | -| :vscode-keyboard-tab-above: | `:vscode-keyboard-tab-above:` | -| :vscode-keyboard-tab-below: | `:vscode-keyboard-tab-below:` | -| :vscode-law: | `:vscode-law:` | -| :vscode-layers: | `:vscode-layers:` | -| :vscode-layers-active: | `:vscode-layers-active:` | -| :vscode-layers-dot: | `:vscode-layers-dot:` | -| :vscode-layout: | `:vscode-layout:` | -| :vscode-layout-activitybar-left: | `:vscode-layout-activitybar-left:` | -| :vscode-layout-activitybar-right: | `:vscode-layout-activitybar-right:` | -| :vscode-layout-centered: | `:vscode-layout-centered:` | -| :vscode-layout-menubar: | `:vscode-layout-menubar:` | -| :vscode-layout-panel: | `:vscode-layout-panel:` | -| :vscode-layout-panel-center: | `:vscode-layout-panel-center:` | -| :vscode-layout-panel-dock: | `:vscode-layout-panel-dock:` | -| :vscode-layout-panel-justify: | `:vscode-layout-panel-justify:` | -| :vscode-layout-panel-left: | `:vscode-layout-panel-left:` | -| :vscode-layout-panel-off: | `:vscode-layout-panel-off:` | -| :vscode-layout-panel-right: | `:vscode-layout-panel-right:` | -| :vscode-layout-sidebar-left: | `:vscode-layout-sidebar-left:` | -| :vscode-layout-sidebar-left-dock: | `:vscode-layout-sidebar-left-dock:` | -| :vscode-layout-sidebar-left-off: | `:vscode-layout-sidebar-left-off:` | -| :vscode-layout-sidebar-right: | `:vscode-layout-sidebar-right:` | -| :vscode-layout-sidebar-right-dock: | `:vscode-layout-sidebar-right-dock:` | -| :vscode-layout-sidebar-right-off: | `:vscode-layout-sidebar-right-off:` | -| :vscode-layout-statusbar: | `:vscode-layout-statusbar:` | -| :vscode-library: | `:vscode-library:` | -| :vscode-lightbulb: | `:vscode-lightbulb:` | -| :vscode-lightbulb-autofix: | `:vscode-lightbulb-autofix:` | -| :vscode-lightbulb-empty: | `:vscode-lightbulb-empty:` | -| :vscode-lightbulb-sparkle: | `:vscode-lightbulb-sparkle:` | -| :vscode-link: | `:vscode-link:` | -| :vscode-link-external: | `:vscode-link-external:` | -| :vscode-list-filter: | `:vscode-list-filter:` | -| :vscode-list-flat: | `:vscode-list-flat:` | -| :vscode-list-ordered: | `:vscode-list-ordered:` | -| :vscode-list-selection: | `:vscode-list-selection:` | -| :vscode-list-tree: | `:vscode-list-tree:` | -| :vscode-list-unordered: | `:vscode-list-unordered:` | -| :vscode-live-share: | `:vscode-live-share:` | -| :vscode-loading: | `:vscode-loading:` | -| :vscode-location: | `:vscode-location:` | -| :vscode-lock: | `:vscode-lock:` | -| :vscode-lock-small: | `:vscode-lock-small:` | -| :vscode-magnet: | `:vscode-magnet:` | -| :vscode-mail: | `:vscode-mail:` | -| :vscode-mail-read: | `:vscode-mail-read:` | -| :vscode-map: | `:vscode-map:` | -| :vscode-map-filled: | `:vscode-map-filled:` | -| :vscode-map-vertical: | `:vscode-map-vertical:` | -| :vscode-map-vertical-filled: | `:vscode-map-vertical-filled:` | -| :vscode-markdown: | `:vscode-markdown:` | -| :vscode-mcp: | `:vscode-mcp:` | -| :vscode-megaphone: | `:vscode-megaphone:` | -| :vscode-mention: | `:vscode-mention:` | -| :vscode-menu: | `:vscode-menu:` | -| :vscode-merge: | `:vscode-merge:` | -| :vscode-merge-into: | `:vscode-merge-into:` | -| :vscode-mic: | `:vscode-mic:` | -| :vscode-mic-filled: | `:vscode-mic-filled:` | -| :vscode-milestone: | `:vscode-milestone:` | -| :vscode-mirror: | `:vscode-mirror:` | -| :vscode-mortar-board: | `:vscode-mortar-board:` | -| :vscode-move: | `:vscode-move:` | -| :vscode-multiple-windows: | `:vscode-multiple-windows:` | -| :vscode-music: | `:vscode-music:` | -| :vscode-mute: | `:vscode-mute:` | -| :vscode-new-collection: | `:vscode-new-collection:` | -| :vscode-new-file: | `:vscode-new-file:` | -| :vscode-new-folder: | `:vscode-new-folder:` | -| :vscode-new-session: | `:vscode-new-session:` | -| :vscode-newline: | `:vscode-newline:` | -| :vscode-no-newline: | `:vscode-no-newline:` | -| :vscode-note: | `:vscode-note:` | -| :vscode-notebook: | `:vscode-notebook:` | -| :vscode-notebook-template: | `:vscode-notebook-template:` | -| :vscode-octoface: | `:vscode-octoface:` | -| :vscode-open-in-product: | `:vscode-open-in-product:` | -| :vscode-open-in-window: | `:vscode-open-in-window:` | -| :vscode-open-preview: | `:vscode-open-preview:` | -| :vscode-openai: | `:vscode-openai:` | -| :vscode-organization: | `:vscode-organization:` | -| :vscode-output: | `:vscode-output:` | -| :vscode-package: | `:vscode-package:` | -| :vscode-paintcan: | `:vscode-paintcan:` | -| :vscode-pass: | `:vscode-pass:` | -| :vscode-pass-filled: | `:vscode-pass-filled:` | -| :vscode-percentage: | `:vscode-percentage:` | -| :vscode-person: | `:vscode-person:` | -| :vscode-person-add: | `:vscode-person-add:` | -| :vscode-piano: | `:vscode-piano:` | -| :vscode-pie-chart: | `:vscode-pie-chart:` | -| :vscode-pin: | `:vscode-pin:` | -| :vscode-pinned: | `:vscode-pinned:` | -| :vscode-pinned-dirty: | `:vscode-pinned-dirty:` | -| :vscode-play: | `:vscode-play:` | -| :vscode-play-circle: | `:vscode-play-circle:` | -| :vscode-plug: | `:vscode-plug:` | -| :vscode-preserve-case: | `:vscode-preserve-case:` | -| :vscode-preview: | `:vscode-preview:` | -| :vscode-primitive-square: | `:vscode-primitive-square:` | -| :vscode-project: | `:vscode-project:` | -| :vscode-pulse: | `:vscode-pulse:` | -| :vscode-python: | `:vscode-python:` | -| :vscode-question: | `:vscode-question:` | -| :vscode-quote: | `:vscode-quote:` | -| :vscode-quotes: | `:vscode-quotes:` | -| :vscode-radio-tower: | `:vscode-radio-tower:` | -| :vscode-reactions: | `:vscode-reactions:` | -| :vscode-record: | `:vscode-record:` | -| :vscode-record-keys: | `:vscode-record-keys:` | -| :vscode-record-small: | `:vscode-record-small:` | -| :vscode-redo: | `:vscode-redo:` | -| :vscode-references: | `:vscode-references:` | -| :vscode-refresh: | `:vscode-refresh:` | -| :vscode-regex: | `:vscode-regex:` | -| :vscode-remote: | `:vscode-remote:` | -| :vscode-remote-explorer: | `:vscode-remote-explorer:` | -| :vscode-remove: | `:vscode-remove:` | -| :vscode-remove-small: | `:vscode-remove-small:` | -| :vscode-rename: | `:vscode-rename:` | -| :vscode-replace: | `:vscode-replace:` | -| :vscode-replace-all: | `:vscode-replace-all:` | -| :vscode-reply: | `:vscode-reply:` | -| :vscode-repo: | `:vscode-repo:` | -| :vscode-repo-clone: | `:vscode-repo-clone:` | -| :vscode-repo-fetch: | `:vscode-repo-fetch:` | -| :vscode-repo-force-push: | `:vscode-repo-force-push:` | -| :vscode-repo-forked: | `:vscode-repo-forked:` | -| :vscode-repo-pinned: | `:vscode-repo-pinned:` | -| :vscode-repo-pull: | `:vscode-repo-pull:` | -| :vscode-repo-push: | `:vscode-repo-push:` | -| :vscode-repo-selected: | `:vscode-repo-selected:` | -| :vscode-report: | `:vscode-report:` | -| :vscode-request-changes: | `:vscode-request-changes:` | -| :vscode-robot: | `:vscode-robot:` | -| :vscode-rocket: | `:vscode-rocket:` | -| :vscode-root-folder: | `:vscode-root-folder:` | -| :vscode-root-folder-opened: | `:vscode-root-folder-opened:` | -| :vscode-rss: | `:vscode-rss:` | -| :vscode-ruby: | `:vscode-ruby:` | -| :vscode-run-above: | `:vscode-run-above:` | -| :vscode-run-all: | `:vscode-run-all:` | -| :vscode-run-all-coverage: | `:vscode-run-all-coverage:` | -| :vscode-run-below: | `:vscode-run-below:` | -| :vscode-run-coverage: | `:vscode-run-coverage:` | -| :vscode-run-errors: | `:vscode-run-errors:` | -| :vscode-run-with-deps: | `:vscode-run-with-deps:` | -| :vscode-save: | `:vscode-save:` | -| :vscode-save-all: | `:vscode-save-all:` | -| :vscode-save-as: | `:vscode-save-as:` | -| :vscode-screen-cut: | `:vscode-screen-cut:` | -| :vscode-screen-full: | `:vscode-screen-full:` | -| :vscode-screen-normal: | `:vscode-screen-normal:` | -| :vscode-search: | `:vscode-search:` | -| :vscode-search-fuzzy: | `:vscode-search-fuzzy:` | -| :vscode-search-large: | `:vscode-search-large:` | -| :vscode-search-sparkle: | `:vscode-search-sparkle:` | -| :vscode-search-stop: | `:vscode-search-stop:` | -| :vscode-send: | `:vscode-send:` | -| :vscode-send-to-remote-agent: | `:vscode-send-to-remote-agent:` | -| :vscode-server: | `:vscode-server:` | -| :vscode-server-environment: | `:vscode-server-environment:` | -| :vscode-server-process: | `:vscode-server-process:` | -| :vscode-session-in-progress: | `:vscode-session-in-progress:` | -| :vscode-settings: | `:vscode-settings:` | -| :vscode-settings-gear: | `:vscode-settings-gear:` | -| :vscode-share: | `:vscode-share:` | -| :vscode-share-window: | `:vscode-share-window:` | -| :vscode-shield: | `:vscode-shield:` | -| :vscode-sign-in: | `:vscode-sign-in:` | -| :vscode-sign-out: | `:vscode-sign-out:` | -| :vscode-skip: | `:vscode-skip:` | -| :vscode-smiley: | `:vscode-smiley:` | -| :vscode-snake: | `:vscode-snake:` | -| :vscode-sort-precedence: | `:vscode-sort-precedence:` | -| :vscode-source-control: | `:vscode-source-control:` | -| :vscode-sparkle: | `:vscode-sparkle:` | -| :vscode-sparkle-filled: | `:vscode-sparkle-filled:` | -| :vscode-split-horizontal: | `:vscode-split-horizontal:` | -| :vscode-split-vertical: | `:vscode-split-vertical:` | -| :vscode-squirrel: | `:vscode-squirrel:` | -| :vscode-star-empty: | `:vscode-star-empty:` | -| :vscode-star-full: | `:vscode-star-full:` | -| :vscode-star-half: | `:vscode-star-half:` | -| :vscode-stop-circle: | `:vscode-stop-circle:` | -| :vscode-strikethrough: | `:vscode-strikethrough:` | -| :vscode-surround-with: | `:vscode-surround-with:` | -| :vscode-symbol-array: | `:vscode-symbol-array:` | -| :vscode-symbol-boolean: | `:vscode-symbol-boolean:` | -| :vscode-symbol-class: | `:vscode-symbol-class:` | -| :vscode-symbol-color: | `:vscode-symbol-color:` | -| :vscode-symbol-constant: | `:vscode-symbol-constant:` | -| :vscode-symbol-enum: | `:vscode-symbol-enum:` | -| :vscode-symbol-enum-member: | `:vscode-symbol-enum-member:` | -| :vscode-symbol-event: | `:vscode-symbol-event:` | -| :vscode-symbol-field: | `:vscode-symbol-field:` | -| :vscode-symbol-file: | `:vscode-symbol-file:` | -| :vscode-symbol-interface: | `:vscode-symbol-interface:` | -| :vscode-symbol-key: | `:vscode-symbol-key:` | -| :vscode-symbol-keyword: | `:vscode-symbol-keyword:` | -| :vscode-symbol-method: | `:vscode-symbol-method:` | -| :vscode-symbol-method-arrow: | `:vscode-symbol-method-arrow:` | -| :vscode-symbol-misc: | `:vscode-symbol-misc:` | -| :vscode-symbol-namespace: | `:vscode-symbol-namespace:` | -| :vscode-symbol-numeric: | `:vscode-symbol-numeric:` | -| :vscode-symbol-operator: | `:vscode-symbol-operator:` | -| :vscode-symbol-parameter: | `:vscode-symbol-parameter:` | -| :vscode-symbol-property: | `:vscode-symbol-property:` | -| :vscode-symbol-ruler: | `:vscode-symbol-ruler:` | -| :vscode-symbol-snippet: | `:vscode-symbol-snippet:` | -| :vscode-symbol-string: | `:vscode-symbol-string:` | -| :vscode-symbol-structure: | `:vscode-symbol-structure:` | -| :vscode-symbol-variable: | `:vscode-symbol-variable:` | -| :vscode-sync: | `:vscode-sync:` | -| :vscode-sync-ignored: | `:vscode-sync-ignored:` | -| :vscode-table: | `:vscode-table:` | -| :vscode-tag: | `:vscode-tag:` | -| :vscode-target: | `:vscode-target:` | -| :vscode-tasklist: | `:vscode-tasklist:` | -| :vscode-telescope: | `:vscode-telescope:` | -| :vscode-terminal: | `:vscode-terminal:` | -| :vscode-terminal-bash: | `:vscode-terminal-bash:` | -| :vscode-terminal-cmd: | `:vscode-terminal-cmd:` | -| :vscode-terminal-debian: | `:vscode-terminal-debian:` | -| :vscode-terminal-git-bash: | `:vscode-terminal-git-bash:` | -| :vscode-terminal-linux: | `:vscode-terminal-linux:` | -| :vscode-terminal-powershell: | `:vscode-terminal-powershell:` | -| :vscode-terminal-secure: | `:vscode-terminal-secure:` | -| :vscode-terminal-tmux: | `:vscode-terminal-tmux:` | -| :vscode-terminal-ubuntu: | `:vscode-terminal-ubuntu:` | -| :vscode-text-size: | `:vscode-text-size:` | -| :vscode-thinking: | `:vscode-thinking:` | -| :vscode-three-bars: | `:vscode-three-bars:` | -| :vscode-thumbsdown: | `:vscode-thumbsdown:` | -| :vscode-thumbsdown-filled: | `:vscode-thumbsdown-filled:` | -| :vscode-thumbsup: | `:vscode-thumbsup:` | -| :vscode-thumbsup-filled: | `:vscode-thumbsup-filled:` | -| :vscode-tools: | `:vscode-tools:` | -| :vscode-trash: | `:vscode-trash:` | -| :vscode-triangle-down: | `:vscode-triangle-down:` | -| :vscode-triangle-left: | `:vscode-triangle-left:` | -| :vscode-triangle-right: | `:vscode-triangle-right:` | -| :vscode-triangle-up: | `:vscode-triangle-up:` | -| :vscode-twitter: | `:vscode-twitter:` | -| :vscode-type-hierarchy: | `:vscode-type-hierarchy:` | -| :vscode-type-hierarchy-sub: | `:vscode-type-hierarchy-sub:` | -| :vscode-type-hierarchy-super: | `:vscode-type-hierarchy-super:` | -| :vscode-unarchive: | `:vscode-unarchive:` | -| :vscode-unfold: | `:vscode-unfold:` | -| :vscode-ungroup-by-ref-type: | `:vscode-ungroup-by-ref-type:` | -| :vscode-unlock: | `:vscode-unlock:` | -| :vscode-unmute: | `:vscode-unmute:` | -| :vscode-unverified: | `:vscode-unverified:` | -| :vscode-variable-group: | `:vscode-variable-group:` | -| :vscode-verified: | `:vscode-verified:` | -| :vscode-verified-filled: | `:vscode-verified-filled:` | -| :vscode-versions: | `:vscode-versions:` | -| :vscode-vm: | `:vscode-vm:` | -| :vscode-vm-active: | `:vscode-vm-active:` | -| :vscode-vm-connect: | `:vscode-vm-connect:` | -| :vscode-vm-outline: | `:vscode-vm-outline:` | -| :vscode-vm-pending: | `:vscode-vm-pending:` | -| :vscode-vm-running: | `:vscode-vm-running:` | -| :vscode-vm-small: | `:vscode-vm-small:` | -| :vscode-vr: | `:vscode-vr:` | -| :vscode-vscode: | `:vscode-vscode:` | -| :vscode-vscode-insiders: | `:vscode-vscode-insiders:` | -| :vscode-wand: | `:vscode-wand:` | -| :vscode-warning: | `:vscode-warning:` | -| :vscode-watch: | `:vscode-watch:` | -| :vscode-whitespace: | `:vscode-whitespace:` | -| :vscode-whole-word: | `:vscode-whole-word:` | -| :vscode-window: | `:vscode-window:` | -| :vscode-window-active: | `:vscode-window-active:` | -| :vscode-word-wrap: | `:vscode-word-wrap:` | -| :vscode-workspace-trusted: | `:vscode-workspace-trusted:` | -| :vscode-workspace-unknown: | `:vscode-workspace-unknown:` | -| :vscode-workspace-untrusted: | `:vscode-workspace-untrusted:` | -| :vscode-worktree: | `:vscode-worktree:` | -| :vscode-worktree-small: | `:vscode-worktree-small:` | -| :vscode-zoom-in: | `:vscode-zoom-in:` | -| :vscode-zoom-out: | `:vscode-zoom-out:` | + +| Иконка | Код для вставки в текст | Код для вставки в frontmatter | +| ------------------------------------------------ | -------------------------------------------------- | ------------------------------------------------ | +| :vscode-account: | `:vscode-account:` | `vscode/account` | +| :vscode-activate-breakpoints: | `:vscode-activate-breakpoints:` | `vscode/activate-breakpoints` | +| :vscode-add: | `:vscode-add:` | `vscode/add` | +| :vscode-add-small: | `:vscode-add-small:` | `vscode/add-small` | +| :vscode-agent: | `:vscode-agent:` | `vscode/agent` | +| :vscode-archive: | `:vscode-archive:` | `vscode/archive` | +| :vscode-arrow-both: | `:vscode-arrow-both:` | `vscode/arrow-both` | +| :vscode-arrow-circle-down: | `:vscode-arrow-circle-down:` | `vscode/arrow-circle-down` | +| :vscode-arrow-circle-left: | `:vscode-arrow-circle-left:` | `vscode/arrow-circle-left` | +| :vscode-arrow-circle-right: | `:vscode-arrow-circle-right:` | `vscode/arrow-circle-right` | +| :vscode-arrow-circle-up: | `:vscode-arrow-circle-up:` | `vscode/arrow-circle-up` | +| :vscode-arrow-down: | `:vscode-arrow-down:` | `vscode/arrow-down` | +| :vscode-arrow-left: | `:vscode-arrow-left:` | `vscode/arrow-left` | +| :vscode-arrow-right: | `:vscode-arrow-right:` | `vscode/arrow-right` | +| :vscode-arrow-small-down: | `:vscode-arrow-small-down:` | `vscode/arrow-small-down` | +| :vscode-arrow-small-left: | `:vscode-arrow-small-left:` | `vscode/arrow-small-left` | +| :vscode-arrow-small-right: | `:vscode-arrow-small-right:` | `vscode/arrow-small-right` | +| :vscode-arrow-small-up: | `:vscode-arrow-small-up:` | `vscode/arrow-small-up` | +| :vscode-arrow-swap: | `:vscode-arrow-swap:` | `vscode/arrow-swap` | +| :vscode-arrow-up: | `:vscode-arrow-up:` | `vscode/arrow-up` | +| :vscode-ask: | `:vscode-ask:` | `vscode/ask` | +| :vscode-attach: | `:vscode-attach:` | `vscode/attach` | +| :vscode-azure: | `:vscode-azure:` | `vscode/azure` | +| :vscode-azure-devops: | `:vscode-azure-devops:` | `vscode/azure-devops` | +| :vscode-beaker: | `:vscode-beaker:` | `vscode/beaker` | +| :vscode-beaker-stop: | `:vscode-beaker-stop:` | `vscode/beaker-stop` | +| :vscode-bell: | `:vscode-bell:` | `vscode/bell` | +| :vscode-bell-dot: | `:vscode-bell-dot:` | `vscode/bell-dot` | +| :vscode-bell-slash: | `:vscode-bell-slash:` | `vscode/bell-slash` | +| :vscode-bell-slash-dot: | `:vscode-bell-slash-dot:` | `vscode/bell-slash-dot` | +| :vscode-blank: | `:vscode-blank:` | `vscode/blank` | +| :vscode-bold: | `:vscode-bold:` | `vscode/bold` | +| :vscode-book: | `:vscode-book:` | `vscode/book` | +| :vscode-bookmark: | `:vscode-bookmark:` | `vscode/bookmark` | +| :vscode-bracket-dot: | `:vscode-bracket-dot:` | `vscode/bracket-dot` | +| :vscode-bracket-error: | `:vscode-bracket-error:` | `vscode/bracket-error` | +| :vscode-briefcase: | `:vscode-briefcase:` | `vscode/briefcase` | +| :vscode-broadcast: | `:vscode-broadcast:` | `vscode/broadcast` | +| :vscode-browser: | `:vscode-browser:` | `vscode/browser` | +| :vscode-bug: | `:vscode-bug:` | `vscode/bug` | +| :vscode-build: | `:vscode-build:` | `vscode/build` | +| :vscode-calendar: | `:vscode-calendar:` | `vscode/calendar` | +| :vscode-call-incoming: | `:vscode-call-incoming:` | `vscode/call-incoming` | +| :vscode-call-outgoing: | `:vscode-call-outgoing:` | `vscode/call-outgoing` | +| :vscode-case-sensitive: | `:vscode-case-sensitive:` | `vscode/case-sensitive` | +| :vscode-chat-export: | `:vscode-chat-export:` | `vscode/chat-export` | +| :vscode-chat-import: | `:vscode-chat-import:` | `vscode/chat-import` | +| :vscode-chat-sparkle: | `:vscode-chat-sparkle:` | `vscode/chat-sparkle` | +| :vscode-chat-sparkle-error: | `:vscode-chat-sparkle-error:` | `vscode/chat-sparkle-error` | +| :vscode-chat-sparkle-warning: | `:vscode-chat-sparkle-warning:` | `vscode/chat-sparkle-warning` | +| :vscode-check: | `:vscode-check:` | `vscode/check` | +| :vscode-check-all: | `:vscode-check-all:` | `vscode/check-all` | +| :vscode-checklist: | `:vscode-checklist:` | `vscode/checklist` | +| :vscode-chevron-down: | `:vscode-chevron-down:` | `vscode/chevron-down` | +| :vscode-chevron-left: | `:vscode-chevron-left:` | `vscode/chevron-left` | +| :vscode-chevron-right: | `:vscode-chevron-right:` | `vscode/chevron-right` | +| :vscode-chevron-up: | `:vscode-chevron-up:` | `vscode/chevron-up` | +| :vscode-chip: | `:vscode-chip:` | `vscode/chip` | +| :vscode-chrome-close: | `:vscode-chrome-close:` | `vscode/chrome-close` | +| :vscode-chrome-maximize: | `:vscode-chrome-maximize:` | `vscode/chrome-maximize` | +| :vscode-chrome-minimize: | `:vscode-chrome-minimize:` | `vscode/chrome-minimize` | +| :vscode-chrome-restore: | `:vscode-chrome-restore:` | `vscode/chrome-restore` | +| :vscode-circle: | `:vscode-circle:` | `vscode/circle` | +| :vscode-circle-filled: | `:vscode-circle-filled:` | `vscode/circle-filled` | +| :vscode-circle-large: | `:vscode-circle-large:` | `vscode/circle-large` | +| :vscode-circle-large-filled: | `:vscode-circle-large-filled:` | `vscode/circle-large-filled` | +| :vscode-circle-slash: | `:vscode-circle-slash:` | `vscode/circle-slash` | +| :vscode-circle-small: | `:vscode-circle-small:` | `vscode/circle-small` | +| :vscode-circle-small-filled: | `:vscode-circle-small-filled:` | `vscode/circle-small-filled` | +| :vscode-circuit-board: | `:vscode-circuit-board:` | `vscode/circuit-board` | +| :vscode-claude: | `:vscode-claude:` | `vscode/claude` | +| :vscode-clear-all: | `:vscode-clear-all:` | `vscode/clear-all` | +| :vscode-clippy: | `:vscode-clippy:` | `vscode/clippy` | +| :vscode-clockface: | `:vscode-clockface:` | `vscode/clockface` | +| :vscode-close: | `:vscode-close:` | `vscode/close` | +| :vscode-close-all: | `:vscode-close-all:` | `vscode/close-all` | +| :vscode-cloud: | `:vscode-cloud:` | `vscode/cloud` | +| :vscode-cloud-download: | `:vscode-cloud-download:` | `vscode/cloud-download` | +| :vscode-cloud-small: | `:vscode-cloud-small:` | `vscode/cloud-small` | +| :vscode-cloud-upload: | `:vscode-cloud-upload:` | `vscode/cloud-upload` | +| :vscode-code: | `:vscode-code:` | `vscode/code` | +| :vscode-code-oss: | `:vscode-code-oss:` | `vscode/code-oss` | +| :vscode-code-review: | `:vscode-code-review:` | `vscode/code-review` | +| :vscode-coffee: | `:vscode-coffee:` | `vscode/coffee` | +| :vscode-collapse-all: | `:vscode-collapse-all:` | `vscode/collapse-all` | +| :vscode-collection: | `:vscode-collection:` | `vscode/collection` | +| :vscode-collection-small: | `:vscode-collection-small:` | `vscode/collection-small` | +| :vscode-color-mode: | `:vscode-color-mode:` | `vscode/color-mode` | +| :vscode-combine: | `:vscode-combine:` | `vscode/combine` | +| :vscode-comment: | `:vscode-comment:` | `vscode/comment` | +| :vscode-comment-discussion: | `:vscode-comment-discussion:` | `vscode/comment-discussion` | +| :vscode-comment-discussion-quote: | `:vscode-comment-discussion-quote:` | `vscode/comment-discussion-quote` | +| :vscode-comment-discussion-sparkle: | `:vscode-comment-discussion-sparkle:` | `vscode/comment-discussion-sparkle` | +| :vscode-comment-draft: | `:vscode-comment-draft:` | `vscode/comment-draft` | +| :vscode-comment-unresolved: | `:vscode-comment-unresolved:` | `vscode/comment-unresolved` | +| :vscode-compass: | `:vscode-compass:` | `vscode/compass` | +| :vscode-compass-active: | `:vscode-compass-active:` | `vscode/compass-active` | +| :vscode-compass-dot: | `:vscode-compass-dot:` | `vscode/compass-dot` | +| :vscode-copilot: | `:vscode-copilot:` | `vscode/copilot` | +| :vscode-copilot-blocked: | `:vscode-copilot-blocked:` | `vscode/copilot-blocked` | +| :vscode-copilot-error: | `:vscode-copilot-error:` | `vscode/copilot-error` | +| :vscode-copilot-in-progress: | `:vscode-copilot-in-progress:` | `vscode/copilot-in-progress` | +| :vscode-copilot-large: | `:vscode-copilot-large:` | `vscode/copilot-large` | +| :vscode-copilot-not-connected: | `:vscode-copilot-not-connected:` | `vscode/copilot-not-connected` | +| :vscode-copilot-snooze: | `:vscode-copilot-snooze:` | `vscode/copilot-snooze` | +| :vscode-copilot-success: | `:vscode-copilot-success:` | `vscode/copilot-success` | +| :vscode-copilot-unavailable: | `:vscode-copilot-unavailable:` | `vscode/copilot-unavailable` | +| :vscode-copilot-warning: | `:vscode-copilot-warning:` | `vscode/copilot-warning` | +| :vscode-copilot-warning-large: | `:vscode-copilot-warning-large:` | `vscode/copilot-warning-large` | +| :vscode-copy: | `:vscode-copy:` | `vscode/copy` | +| :vscode-coverage: | `:vscode-coverage:` | `vscode/coverage` | +| :vscode-credit-card: | `:vscode-credit-card:` | `vscode/credit-card` | +| :vscode-cursor: | `:vscode-cursor:` | `vscode/cursor` | +| :vscode-dash: | `:vscode-dash:` | `vscode/dash` | +| :vscode-dashboard: | `:vscode-dashboard:` | `vscode/dashboard` | +| :vscode-database: | `:vscode-database:` | `vscode/database` | +| :vscode-debug: | `:vscode-debug:` | `vscode/debug` | +| :vscode-debug-all: | `:vscode-debug-all:` | `vscode/debug-all` | +| :vscode-debug-alt: | `:vscode-debug-alt:` | `vscode/debug-alt` | +| :vscode-debug-alt-small: | `:vscode-debug-alt-small:` | `vscode/debug-alt-small` | +| :vscode-debug-breakpoint-conditional: | `:vscode-debug-breakpoint-conditional:` | `vscode/debug-breakpoint-conditional` | +| :vscode-debug-breakpoint-conditional-unverified: | `:vscode-debug-breakpoint-conditional-unverified:` | `vscode/debug-breakpoint-conditional-unverified` | +| :vscode-debug-breakpoint-data: | `:vscode-debug-breakpoint-data:` | `vscode/debug-breakpoint-data` | +| :vscode-debug-breakpoint-data-unverified: | `:vscode-debug-breakpoint-data-unverified:` | `vscode/debug-breakpoint-data-unverified` | +| :vscode-debug-breakpoint-function: | `:vscode-debug-breakpoint-function:` | `vscode/debug-breakpoint-function` | +| :vscode-debug-breakpoint-function-unverified: | `:vscode-debug-breakpoint-function-unverified:` | `vscode/debug-breakpoint-function-unverified` | +| :vscode-debug-breakpoint-log: | `:vscode-debug-breakpoint-log:` | `vscode/debug-breakpoint-log` | +| :vscode-debug-breakpoint-log-unverified: | `:vscode-debug-breakpoint-log-unverified:` | `vscode/debug-breakpoint-log-unverified` | +| :vscode-debug-breakpoint-unsupported: | `:vscode-debug-breakpoint-unsupported:` | `vscode/debug-breakpoint-unsupported` | +| :vscode-debug-connected: | `:vscode-debug-connected:` | `vscode/debug-connected` | +| :vscode-debug-console: | `:vscode-debug-console:` | `vscode/debug-console` | +| :vscode-debug-continue: | `:vscode-debug-continue:` | `vscode/debug-continue` | +| :vscode-debug-continue-small: | `:vscode-debug-continue-small:` | `vscode/debug-continue-small` | +| :vscode-debug-coverage: | `:vscode-debug-coverage:` | `vscode/debug-coverage` | +| :vscode-debug-disconnect: | `:vscode-debug-disconnect:` | `vscode/debug-disconnect` | +| :vscode-debug-line-by-line: | `:vscode-debug-line-by-line:` | `vscode/debug-line-by-line` | +| :vscode-debug-pause: | `:vscode-debug-pause:` | `vscode/debug-pause` | +| :vscode-debug-rerun: | `:vscode-debug-rerun:` | `vscode/debug-rerun` | +| :vscode-debug-restart: | `:vscode-debug-restart:` | `vscode/debug-restart` | +| :vscode-debug-restart-frame: | `:vscode-debug-restart-frame:` | `vscode/debug-restart-frame` | +| :vscode-debug-reverse-continue: | `:vscode-debug-reverse-continue:` | `vscode/debug-reverse-continue` | +| :vscode-debug-stackframe: | `:vscode-debug-stackframe:` | `vscode/debug-stackframe` | +| :vscode-debug-stackframe-active: | `:vscode-debug-stackframe-active:` | `vscode/debug-stackframe-active` | +| :vscode-debug-start: | `:vscode-debug-start:` | `vscode/debug-start` | +| :vscode-debug-step-back: | `:vscode-debug-step-back:` | `vscode/debug-step-back` | +| :vscode-debug-step-into: | `:vscode-debug-step-into:` | `vscode/debug-step-into` | +| :vscode-debug-step-out: | `:vscode-debug-step-out:` | `vscode/debug-step-out` | +| :vscode-debug-step-over: | `:vscode-debug-step-over:` | `vscode/debug-step-over` | +| :vscode-debug-stop: | `:vscode-debug-stop:` | `vscode/debug-stop` | +| :vscode-desktop-download: | `:vscode-desktop-download:` | `vscode/desktop-download` | +| :vscode-device-camera: | `:vscode-device-camera:` | `vscode/device-camera` | +| :vscode-device-camera-video: | `:vscode-device-camera-video:` | `vscode/device-camera-video` | +| :vscode-device-mobile: | `:vscode-device-mobile:` | `vscode/device-mobile` | +| :vscode-diff: | `:vscode-diff:` | `vscode/diff` | +| :vscode-diff-added: | `:vscode-diff-added:` | `vscode/diff-added` | +| :vscode-diff-ignored: | `:vscode-diff-ignored:` | `vscode/diff-ignored` | +| :vscode-diff-modified: | `:vscode-diff-modified:` | `vscode/diff-modified` | +| :vscode-diff-multiple: | `:vscode-diff-multiple:` | `vscode/diff-multiple` | +| :vscode-diff-removed: | `:vscode-diff-removed:` | `vscode/diff-removed` | +| :vscode-diff-renamed: | `:vscode-diff-renamed:` | `vscode/diff-renamed` | +| :vscode-diff-single: | `:vscode-diff-single:` | `vscode/diff-single` | +| :vscode-discard: | `:vscode-discard:` | `vscode/discard` | +| :vscode-download: | `:vscode-download:` | `vscode/download` | +| :vscode-edit: | `:vscode-edit:` | `vscode/edit` | +| :vscode-edit-code: | `:vscode-edit-code:` | `vscode/edit-code` | +| :vscode-edit-session: | `:vscode-edit-session:` | `vscode/edit-session` | +| :vscode-edit-sparkle: | `:vscode-edit-sparkle:` | `vscode/edit-sparkle` | +| :vscode-editor-layout: | `:vscode-editor-layout:` | `vscode/editor-layout` | +| :vscode-ellipsis: | `:vscode-ellipsis:` | `vscode/ellipsis` | +| :vscode-empty-window: | `:vscode-empty-window:` | `vscode/empty-window` | +| :vscode-eraser: | `:vscode-eraser:` | `vscode/eraser` | +| :vscode-error: | `:vscode-error:` | `vscode/error` | +| :vscode-error-small: | `:vscode-error-small:` | `vscode/error-small` | +| :vscode-exclude: | `:vscode-exclude:` | `vscode/exclude` | +| :vscode-expand-all: | `:vscode-expand-all:` | `vscode/expand-all` | +| :vscode-export: | `:vscode-export:` | `vscode/export` | +| :vscode-extensions: | `:vscode-extensions:` | `vscode/extensions` | +| :vscode-extensions-large: | `:vscode-extensions-large:` | `vscode/extensions-large` | +| :vscode-eye: | `:vscode-eye:` | `vscode/eye` | +| :vscode-eye-closed: | `:vscode-eye-closed:` | `vscode/eye-closed` | +| :vscode-feedback: | `:vscode-feedback:` | `vscode/feedback` | +| :vscode-file: | `:vscode-file:` | `vscode/file` | +| :vscode-file-binary: | `:vscode-file-binary:` | `vscode/file-binary` | +| :vscode-file-code: | `:vscode-file-code:` | `vscode/file-code` | +| :vscode-file-media: | `:vscode-file-media:` | `vscode/file-media` | +| :vscode-file-pdf: | `:vscode-file-pdf:` | `vscode/file-pdf` | +| :vscode-file-submodule: | `:vscode-file-submodule:` | `vscode/file-submodule` | +| :vscode-file-symlink-directory: | `:vscode-file-symlink-directory:` | `vscode/file-symlink-directory` | +| :vscode-file-symlink-file: | `:vscode-file-symlink-file:` | `vscode/file-symlink-file` | +| :vscode-file-text: | `:vscode-file-text:` | `vscode/file-text` | +| :vscode-file-zip: | `:vscode-file-zip:` | `vscode/file-zip` | +| :vscode-files: | `:vscode-files:` | `vscode/files` | +| :vscode-filter: | `:vscode-filter:` | `vscode/filter` | +| :vscode-filter-filled: | `:vscode-filter-filled:` | `vscode/filter-filled` | +| :vscode-flag: | `:vscode-flag:` | `vscode/flag` | +| :vscode-flame: | `:vscode-flame:` | `vscode/flame` | +| :vscode-fold: | `:vscode-fold:` | `vscode/fold` | +| :vscode-fold-down: | `:vscode-fold-down:` | `vscode/fold-down` | +| :vscode-fold-up: | `:vscode-fold-up:` | `vscode/fold-up` | +| :vscode-folder: | `:vscode-folder:` | `vscode/folder` | +| :vscode-folder-active: | `:vscode-folder-active:` | `vscode/folder-active` | +| :vscode-folder-library: | `:vscode-folder-library:` | `vscode/folder-library` | +| :vscode-folder-opened: | `:vscode-folder-opened:` | `vscode/folder-opened` | +| :vscode-forward: | `:vscode-forward:` | `vscode/forward` | +| :vscode-game: | `:vscode-game:` | `vscode/game` | +| :vscode-gear: | `:vscode-gear:` | `vscode/gear` | +| :vscode-gift: | `:vscode-gift:` | `vscode/gift` | +| :vscode-gist: | `:vscode-gist:` | `vscode/gist` | +| :vscode-gist-secret: | `:vscode-gist-secret:` | `vscode/gist-secret` | +| :vscode-git-branch: | `:vscode-git-branch:` | `vscode/git-branch` | +| :vscode-git-branch-changes: | `:vscode-git-branch-changes:` | `vscode/git-branch-changes` | +| :vscode-git-branch-conflicts: | `:vscode-git-branch-conflicts:` | `vscode/git-branch-conflicts` | +| :vscode-git-branch-staged-changes: | `:vscode-git-branch-staged-changes:` | `vscode/git-branch-staged-changes` | +| :vscode-git-commit: | `:vscode-git-commit:` | `vscode/git-commit` | +| :vscode-git-compare: | `:vscode-git-compare:` | `vscode/git-compare` | +| :vscode-git-fetch: | `:vscode-git-fetch:` | `vscode/git-fetch` | +| :vscode-git-merge: | `:vscode-git-merge:` | `vscode/git-merge` | +| :vscode-git-pull-request: | `:vscode-git-pull-request:` | `vscode/git-pull-request` | +| :vscode-git-pull-request-closed: | `:vscode-git-pull-request-closed:` | `vscode/git-pull-request-closed` | +| :vscode-git-pull-request-create: | `:vscode-git-pull-request-create:` | `vscode/git-pull-request-create` | +| :vscode-git-pull-request-done: | `:vscode-git-pull-request-done:` | `vscode/git-pull-request-done` | +| :vscode-git-pull-request-draft: | `:vscode-git-pull-request-draft:` | `vscode/git-pull-request-draft` | +| :vscode-git-pull-request-go-to-changes: | `:vscode-git-pull-request-go-to-changes:` | `vscode/git-pull-request-go-to-changes` | +| :vscode-git-pull-request-new-changes: | `:vscode-git-pull-request-new-changes:` | `vscode/git-pull-request-new-changes` | +| :vscode-git-stash: | `:vscode-git-stash:` | `vscode/git-stash` | +| :vscode-git-stash-apply: | `:vscode-git-stash-apply:` | `vscode/git-stash-apply` | +| :vscode-git-stash-pop: | `:vscode-git-stash-pop:` | `vscode/git-stash-pop` | +| :vscode-github: | `:vscode-github:` | `vscode/github` | +| :vscode-github-action: | `:vscode-github-action:` | `vscode/github-action` | +| :vscode-github-alt: | `:vscode-github-alt:` | `vscode/github-alt` | +| :vscode-github-inverted: | `:vscode-github-inverted:` | `vscode/github-inverted` | +| :vscode-github-project: | `:vscode-github-project:` | `vscode/github-project` | +| :vscode-globe: | `:vscode-globe:` | `vscode/globe` | +| :vscode-go-to-editing-session: | `:vscode-go-to-editing-session:` | `vscode/go-to-editing-session` | +| :vscode-go-to-file: | `:vscode-go-to-file:` | `vscode/go-to-file` | +| :vscode-go-to-search: | `:vscode-go-to-search:` | `vscode/go-to-search` | +| :vscode-grabber: | `:vscode-grabber:` | `vscode/grabber` | +| :vscode-graph: | `:vscode-graph:` | `vscode/graph` | +| :vscode-graph-left: | `:vscode-graph-left:` | `vscode/graph-left` | +| :vscode-graph-line: | `:vscode-graph-line:` | `vscode/graph-line` | +| :vscode-graph-scatter: | `:vscode-graph-scatter:` | `vscode/graph-scatter` | +| :vscode-gripper: | `:vscode-gripper:` | `vscode/gripper` | +| :vscode-group-by-ref-type: | `:vscode-group-by-ref-type:` | `vscode/group-by-ref-type` | +| :vscode-heart: | `:vscode-heart:` | `vscode/heart` | +| :vscode-heart-filled: | `:vscode-heart-filled:` | `vscode/heart-filled` | +| :vscode-history: | `:vscode-history:` | `vscode/history` | +| :vscode-home: | `:vscode-home:` | `vscode/home` | +| :vscode-horizontal-rule: | `:vscode-horizontal-rule:` | `vscode/horizontal-rule` | +| :vscode-hubot: | `:vscode-hubot:` | `vscode/hubot` | +| :vscode-inbox: | `:vscode-inbox:` | `vscode/inbox` | +| :vscode-indent: | `:vscode-indent:` | `vscode/indent` | +| :vscode-index-zero: | `:vscode-index-zero:` | `vscode/index-zero` | +| :vscode-info: | `:vscode-info:` | `vscode/info` | +| :vscode-insert: | `:vscode-insert:` | `vscode/insert` | +| :vscode-inspect: | `:vscode-inspect:` | `vscode/inspect` | +| :vscode-issue-draft: | `:vscode-issue-draft:` | `vscode/issue-draft` | +| :vscode-issue-reopened: | `:vscode-issue-reopened:` | `vscode/issue-reopened` | +| :vscode-issues: | `:vscode-issues:` | `vscode/issues` | +| :vscode-italic: | `:vscode-italic:` | `vscode/italic` | +| :vscode-jersey: | `:vscode-jersey:` | `vscode/jersey` | +| :vscode-json: | `:vscode-json:` | `vscode/json` | +| :vscode-kebab-vertical: | `:vscode-kebab-vertical:` | `vscode/kebab-vertical` | +| :vscode-key: | `:vscode-key:` | `vscode/key` | +| :vscode-keyboard-tab: | `:vscode-keyboard-tab:` | `vscode/keyboard-tab` | +| :vscode-keyboard-tab-above: | `:vscode-keyboard-tab-above:` | `vscode/keyboard-tab-above` | +| :vscode-keyboard-tab-below: | `:vscode-keyboard-tab-below:` | `vscode/keyboard-tab-below` | +| :vscode-law: | `:vscode-law:` | `vscode/law` | +| :vscode-layers: | `:vscode-layers:` | `vscode/layers` | +| :vscode-layers-active: | `:vscode-layers-active:` | `vscode/layers-active` | +| :vscode-layers-dot: | `:vscode-layers-dot:` | `vscode/layers-dot` | +| :vscode-layout: | `:vscode-layout:` | `vscode/layout` | +| :vscode-layout-activitybar-left: | `:vscode-layout-activitybar-left:` | `vscode/layout-activitybar-left` | +| :vscode-layout-activitybar-right: | `:vscode-layout-activitybar-right:` | `vscode/layout-activitybar-right` | +| :vscode-layout-centered: | `:vscode-layout-centered:` | `vscode/layout-centered` | +| :vscode-layout-menubar: | `:vscode-layout-menubar:` | `vscode/layout-menubar` | +| :vscode-layout-panel: | `:vscode-layout-panel:` | `vscode/layout-panel` | +| :vscode-layout-panel-center: | `:vscode-layout-panel-center:` | `vscode/layout-panel-center` | +| :vscode-layout-panel-dock: | `:vscode-layout-panel-dock:` | `vscode/layout-panel-dock` | +| :vscode-layout-panel-justify: | `:vscode-layout-panel-justify:` | `vscode/layout-panel-justify` | +| :vscode-layout-panel-left: | `:vscode-layout-panel-left:` | `vscode/layout-panel-left` | +| :vscode-layout-panel-off: | `:vscode-layout-panel-off:` | `vscode/layout-panel-off` | +| :vscode-layout-panel-right: | `:vscode-layout-panel-right:` | `vscode/layout-panel-right` | +| :vscode-layout-sidebar-left: | `:vscode-layout-sidebar-left:` | `vscode/layout-sidebar-left` | +| :vscode-layout-sidebar-left-dock: | `:vscode-layout-sidebar-left-dock:` | `vscode/layout-sidebar-left-dock` | +| :vscode-layout-sidebar-left-off: | `:vscode-layout-sidebar-left-off:` | `vscode/layout-sidebar-left-off` | +| :vscode-layout-sidebar-right: | `:vscode-layout-sidebar-right:` | `vscode/layout-sidebar-right` | +| :vscode-layout-sidebar-right-dock: | `:vscode-layout-sidebar-right-dock:` | `vscode/layout-sidebar-right-dock` | +| :vscode-layout-sidebar-right-off: | `:vscode-layout-sidebar-right-off:` | `vscode/layout-sidebar-right-off` | +| :vscode-layout-statusbar: | `:vscode-layout-statusbar:` | `vscode/layout-statusbar` | +| :vscode-library: | `:vscode-library:` | `vscode/library` | +| :vscode-lightbulb: | `:vscode-lightbulb:` | `vscode/lightbulb` | +| :vscode-lightbulb-autofix: | `:vscode-lightbulb-autofix:` | `vscode/lightbulb-autofix` | +| :vscode-lightbulb-empty: | `:vscode-lightbulb-empty:` | `vscode/lightbulb-empty` | +| :vscode-lightbulb-sparkle: | `:vscode-lightbulb-sparkle:` | `vscode/lightbulb-sparkle` | +| :vscode-link: | `:vscode-link:` | `vscode/link` | +| :vscode-link-external: | `:vscode-link-external:` | `vscode/link-external` | +| :vscode-list-filter: | `:vscode-list-filter:` | `vscode/list-filter` | +| :vscode-list-flat: | `:vscode-list-flat:` | `vscode/list-flat` | +| :vscode-list-ordered: | `:vscode-list-ordered:` | `vscode/list-ordered` | +| :vscode-list-selection: | `:vscode-list-selection:` | `vscode/list-selection` | +| :vscode-list-tree: | `:vscode-list-tree:` | `vscode/list-tree` | +| :vscode-list-unordered: | `:vscode-list-unordered:` | `vscode/list-unordered` | +| :vscode-live-share: | `:vscode-live-share:` | `vscode/live-share` | +| :vscode-loading: | `:vscode-loading:` | `vscode/loading` | +| :vscode-location: | `:vscode-location:` | `vscode/location` | +| :vscode-lock: | `:vscode-lock:` | `vscode/lock` | +| :vscode-lock-small: | `:vscode-lock-small:` | `vscode/lock-small` | +| :vscode-magnet: | `:vscode-magnet:` | `vscode/magnet` | +| :vscode-mail: | `:vscode-mail:` | `vscode/mail` | +| :vscode-mail-read: | `:vscode-mail-read:` | `vscode/mail-read` | +| :vscode-map: | `:vscode-map:` | `vscode/map` | +| :vscode-map-filled: | `:vscode-map-filled:` | `vscode/map-filled` | +| :vscode-map-vertical: | `:vscode-map-vertical:` | `vscode/map-vertical` | +| :vscode-map-vertical-filled: | `:vscode-map-vertical-filled:` | `vscode/map-vertical-filled` | +| :vscode-markdown: | `:vscode-markdown:` | `vscode/markdown` | +| :vscode-mcp: | `:vscode-mcp:` | `vscode/mcp` | +| :vscode-megaphone: | `:vscode-megaphone:` | `vscode/megaphone` | +| :vscode-mention: | `:vscode-mention:` | `vscode/mention` | +| :vscode-menu: | `:vscode-menu:` | `vscode/menu` | +| :vscode-merge: | `:vscode-merge:` | `vscode/merge` | +| :vscode-merge-into: | `:vscode-merge-into:` | `vscode/merge-into` | +| :vscode-mic: | `:vscode-mic:` | `vscode/mic` | +| :vscode-mic-filled: | `:vscode-mic-filled:` | `vscode/mic-filled` | +| :vscode-milestone: | `:vscode-milestone:` | `vscode/milestone` | +| :vscode-mirror: | `:vscode-mirror:` | `vscode/mirror` | +| :vscode-mortar-board: | `:vscode-mortar-board:` | `vscode/mortar-board` | +| :vscode-move: | `:vscode-move:` | `vscode/move` | +| :vscode-multiple-windows: | `:vscode-multiple-windows:` | `vscode/multiple-windows` | +| :vscode-music: | `:vscode-music:` | `vscode/music` | +| :vscode-mute: | `:vscode-mute:` | `vscode/mute` | +| :vscode-new-collection: | `:vscode-new-collection:` | `vscode/new-collection` | +| :vscode-new-file: | `:vscode-new-file:` | `vscode/new-file` | +| :vscode-new-folder: | `:vscode-new-folder:` | `vscode/new-folder` | +| :vscode-new-session: | `:vscode-new-session:` | `vscode/new-session` | +| :vscode-newline: | `:vscode-newline:` | `vscode/newline` | +| :vscode-no-newline: | `:vscode-no-newline:` | `vscode/no-newline` | +| :vscode-note: | `:vscode-note:` | `vscode/note` | +| :vscode-notebook: | `:vscode-notebook:` | `vscode/notebook` | +| :vscode-notebook-template: | `:vscode-notebook-template:` | `vscode/notebook-template` | +| :vscode-octoface: | `:vscode-octoface:` | `vscode/octoface` | +| :vscode-open-in-product: | `:vscode-open-in-product:` | `vscode/open-in-product` | +| :vscode-open-in-window: | `:vscode-open-in-window:` | `vscode/open-in-window` | +| :vscode-open-preview: | `:vscode-open-preview:` | `vscode/open-preview` | +| :vscode-openai: | `:vscode-openai:` | `vscode/openai` | +| :vscode-organization: | `:vscode-organization:` | `vscode/organization` | +| :vscode-output: | `:vscode-output:` | `vscode/output` | +| :vscode-package: | `:vscode-package:` | `vscode/package` | +| :vscode-paintcan: | `:vscode-paintcan:` | `vscode/paintcan` | +| :vscode-pass: | `:vscode-pass:` | `vscode/pass` | +| :vscode-pass-filled: | `:vscode-pass-filled:` | `vscode/pass-filled` | +| :vscode-percentage: | `:vscode-percentage:` | `vscode/percentage` | +| :vscode-person: | `:vscode-person:` | `vscode/person` | +| :vscode-person-add: | `:vscode-person-add:` | `vscode/person-add` | +| :vscode-piano: | `:vscode-piano:` | `vscode/piano` | +| :vscode-pie-chart: | `:vscode-pie-chart:` | `vscode/pie-chart` | +| :vscode-pin: | `:vscode-pin:` | `vscode/pin` | +| :vscode-pinned: | `:vscode-pinned:` | `vscode/pinned` | +| :vscode-pinned-dirty: | `:vscode-pinned-dirty:` | `vscode/pinned-dirty` | +| :vscode-play: | `:vscode-play:` | `vscode/play` | +| :vscode-play-circle: | `:vscode-play-circle:` | `vscode/play-circle` | +| :vscode-plug: | `:vscode-plug:` | `vscode/plug` | +| :vscode-preserve-case: | `:vscode-preserve-case:` | `vscode/preserve-case` | +| :vscode-preview: | `:vscode-preview:` | `vscode/preview` | +| :vscode-primitive-square: | `:vscode-primitive-square:` | `vscode/primitive-square` | +| :vscode-project: | `:vscode-project:` | `vscode/project` | +| :vscode-pulse: | `:vscode-pulse:` | `vscode/pulse` | +| :vscode-python: | `:vscode-python:` | `vscode/python` | +| :vscode-question: | `:vscode-question:` | `vscode/question` | +| :vscode-quote: | `:vscode-quote:` | `vscode/quote` | +| :vscode-quotes: | `:vscode-quotes:` | `vscode/quotes` | +| :vscode-radio-tower: | `:vscode-radio-tower:` | `vscode/radio-tower` | +| :vscode-reactions: | `:vscode-reactions:` | `vscode/reactions` | +| :vscode-record: | `:vscode-record:` | `vscode/record` | +| :vscode-record-keys: | `:vscode-record-keys:` | `vscode/record-keys` | +| :vscode-record-small: | `:vscode-record-small:` | `vscode/record-small` | +| :vscode-redo: | `:vscode-redo:` | `vscode/redo` | +| :vscode-references: | `:vscode-references:` | `vscode/references` | +| :vscode-refresh: | `:vscode-refresh:` | `vscode/refresh` | +| :vscode-regex: | `:vscode-regex:` | `vscode/regex` | +| :vscode-remote: | `:vscode-remote:` | `vscode/remote` | +| :vscode-remote-explorer: | `:vscode-remote-explorer:` | `vscode/remote-explorer` | +| :vscode-remove: | `:vscode-remove:` | `vscode/remove` | +| :vscode-remove-small: | `:vscode-remove-small:` | `vscode/remove-small` | +| :vscode-rename: | `:vscode-rename:` | `vscode/rename` | +| :vscode-replace: | `:vscode-replace:` | `vscode/replace` | +| :vscode-replace-all: | `:vscode-replace-all:` | `vscode/replace-all` | +| :vscode-reply: | `:vscode-reply:` | `vscode/reply` | +| :vscode-repo: | `:vscode-repo:` | `vscode/repo` | +| :vscode-repo-clone: | `:vscode-repo-clone:` | `vscode/repo-clone` | +| :vscode-repo-fetch: | `:vscode-repo-fetch:` | `vscode/repo-fetch` | +| :vscode-repo-force-push: | `:vscode-repo-force-push:` | `vscode/repo-force-push` | +| :vscode-repo-forked: | `:vscode-repo-forked:` | `vscode/repo-forked` | +| :vscode-repo-pinned: | `:vscode-repo-pinned:` | `vscode/repo-pinned` | +| :vscode-repo-pull: | `:vscode-repo-pull:` | `vscode/repo-pull` | +| :vscode-repo-push: | `:vscode-repo-push:` | `vscode/repo-push` | +| :vscode-repo-selected: | `:vscode-repo-selected:` | `vscode/repo-selected` | +| :vscode-report: | `:vscode-report:` | `vscode/report` | +| :vscode-request-changes: | `:vscode-request-changes:` | `vscode/request-changes` | +| :vscode-robot: | `:vscode-robot:` | `vscode/robot` | +| :vscode-rocket: | `:vscode-rocket:` | `vscode/rocket` | +| :vscode-root-folder: | `:vscode-root-folder:` | `vscode/root-folder` | +| :vscode-root-folder-opened: | `:vscode-root-folder-opened:` | `vscode/root-folder-opened` | +| :vscode-rss: | `:vscode-rss:` | `vscode/rss` | +| :vscode-ruby: | `:vscode-ruby:` | `vscode/ruby` | +| :vscode-run-above: | `:vscode-run-above:` | `vscode/run-above` | +| :vscode-run-all: | `:vscode-run-all:` | `vscode/run-all` | +| :vscode-run-all-coverage: | `:vscode-run-all-coverage:` | `vscode/run-all-coverage` | +| :vscode-run-below: | `:vscode-run-below:` | `vscode/run-below` | +| :vscode-run-coverage: | `:vscode-run-coverage:` | `vscode/run-coverage` | +| :vscode-run-errors: | `:vscode-run-errors:` | `vscode/run-errors` | +| :vscode-run-with-deps: | `:vscode-run-with-deps:` | `vscode/run-with-deps` | +| :vscode-save: | `:vscode-save:` | `vscode/save` | +| :vscode-save-all: | `:vscode-save-all:` | `vscode/save-all` | +| :vscode-save-as: | `:vscode-save-as:` | `vscode/save-as` | +| :vscode-screen-cut: | `:vscode-screen-cut:` | `vscode/screen-cut` | +| :vscode-screen-full: | `:vscode-screen-full:` | `vscode/screen-full` | +| :vscode-screen-normal: | `:vscode-screen-normal:` | `vscode/screen-normal` | +| :vscode-search: | `:vscode-search:` | `vscode/search` | +| :vscode-search-fuzzy: | `:vscode-search-fuzzy:` | `vscode/search-fuzzy` | +| :vscode-search-large: | `:vscode-search-large:` | `vscode/search-large` | +| :vscode-search-sparkle: | `:vscode-search-sparkle:` | `vscode/search-sparkle` | +| :vscode-search-stop: | `:vscode-search-stop:` | `vscode/search-stop` | +| :vscode-send: | `:vscode-send:` | `vscode/send` | +| :vscode-send-to-remote-agent: | `:vscode-send-to-remote-agent:` | `vscode/send-to-remote-agent` | +| :vscode-server: | `:vscode-server:` | `vscode/server` | +| :vscode-server-environment: | `:vscode-server-environment:` | `vscode/server-environment` | +| :vscode-server-process: | `:vscode-server-process:` | `vscode/server-process` | +| :vscode-session-in-progress: | `:vscode-session-in-progress:` | `vscode/session-in-progress` | +| :vscode-settings: | `:vscode-settings:` | `vscode/settings` | +| :vscode-settings-gear: | `:vscode-settings-gear:` | `vscode/settings-gear` | +| :vscode-share: | `:vscode-share:` | `vscode/share` | +| :vscode-share-window: | `:vscode-share-window:` | `vscode/share-window` | +| :vscode-shield: | `:vscode-shield:` | `vscode/shield` | +| :vscode-sign-in: | `:vscode-sign-in:` | `vscode/sign-in` | +| :vscode-sign-out: | `:vscode-sign-out:` | `vscode/sign-out` | +| :vscode-skip: | `:vscode-skip:` | `vscode/skip` | +| :vscode-smiley: | `:vscode-smiley:` | `vscode/smiley` | +| :vscode-snake: | `:vscode-snake:` | `vscode/snake` | +| :vscode-sort-precedence: | `:vscode-sort-precedence:` | `vscode/sort-precedence` | +| :vscode-source-control: | `:vscode-source-control:` | `vscode/source-control` | +| :vscode-sparkle: | `:vscode-sparkle:` | `vscode/sparkle` | +| :vscode-sparkle-filled: | `:vscode-sparkle-filled:` | `vscode/sparkle-filled` | +| :vscode-split-horizontal: | `:vscode-split-horizontal:` | `vscode/split-horizontal` | +| :vscode-split-vertical: | `:vscode-split-vertical:` | `vscode/split-vertical` | +| :vscode-squirrel: | `:vscode-squirrel:` | `vscode/squirrel` | +| :vscode-star-empty: | `:vscode-star-empty:` | `vscode/star-empty` | +| :vscode-star-full: | `:vscode-star-full:` | `vscode/star-full` | +| :vscode-star-half: | `:vscode-star-half:` | `vscode/star-half` | +| :vscode-stop-circle: | `:vscode-stop-circle:` | `vscode/stop-circle` | +| :vscode-strikethrough: | `:vscode-strikethrough:` | `vscode/strikethrough` | +| :vscode-surround-with: | `:vscode-surround-with:` | `vscode/surround-with` | +| :vscode-symbol-array: | `:vscode-symbol-array:` | `vscode/symbol-array` | +| :vscode-symbol-boolean: | `:vscode-symbol-boolean:` | `vscode/symbol-boolean` | +| :vscode-symbol-class: | `:vscode-symbol-class:` | `vscode/symbol-class` | +| :vscode-symbol-color: | `:vscode-symbol-color:` | `vscode/symbol-color` | +| :vscode-symbol-constant: | `:vscode-symbol-constant:` | `vscode/symbol-constant` | +| :vscode-symbol-enum: | `:vscode-symbol-enum:` | `vscode/symbol-enum` | +| :vscode-symbol-enum-member: | `:vscode-symbol-enum-member:` | `vscode/symbol-enum-member` | +| :vscode-symbol-event: | `:vscode-symbol-event:` | `vscode/symbol-event` | +| :vscode-symbol-field: | `:vscode-symbol-field:` | `vscode/symbol-field` | +| :vscode-symbol-file: | `:vscode-symbol-file:` | `vscode/symbol-file` | +| :vscode-symbol-interface: | `:vscode-symbol-interface:` | `vscode/symbol-interface` | +| :vscode-symbol-key: | `:vscode-symbol-key:` | `vscode/symbol-key` | +| :vscode-symbol-keyword: | `:vscode-symbol-keyword:` | `vscode/symbol-keyword` | +| :vscode-symbol-method: | `:vscode-symbol-method:` | `vscode/symbol-method` | +| :vscode-symbol-method-arrow: | `:vscode-symbol-method-arrow:` | `vscode/symbol-method-arrow` | +| :vscode-symbol-misc: | `:vscode-symbol-misc:` | `vscode/symbol-misc` | +| :vscode-symbol-namespace: | `:vscode-symbol-namespace:` | `vscode/symbol-namespace` | +| :vscode-symbol-numeric: | `:vscode-symbol-numeric:` | `vscode/symbol-numeric` | +| :vscode-symbol-operator: | `:vscode-symbol-operator:` | `vscode/symbol-operator` | +| :vscode-symbol-parameter: | `:vscode-symbol-parameter:` | `vscode/symbol-parameter` | +| :vscode-symbol-property: | `:vscode-symbol-property:` | `vscode/symbol-property` | +| :vscode-symbol-ruler: | `:vscode-symbol-ruler:` | `vscode/symbol-ruler` | +| :vscode-symbol-snippet: | `:vscode-symbol-snippet:` | `vscode/symbol-snippet` | +| :vscode-symbol-string: | `:vscode-symbol-string:` | `vscode/symbol-string` | +| :vscode-symbol-structure: | `:vscode-symbol-structure:` | `vscode/symbol-structure` | +| :vscode-symbol-variable: | `:vscode-symbol-variable:` | `vscode/symbol-variable` | +| :vscode-sync: | `:vscode-sync:` | `vscode/sync` | +| :vscode-sync-ignored: | `:vscode-sync-ignored:` | `vscode/sync-ignored` | +| :vscode-table: | `:vscode-table:` | `vscode/table` | +| :vscode-tag: | `:vscode-tag:` | `vscode/tag` | +| :vscode-target: | `:vscode-target:` | `vscode/target` | +| :vscode-tasklist: | `:vscode-tasklist:` | `vscode/tasklist` | +| :vscode-telescope: | `:vscode-telescope:` | `vscode/telescope` | +| :vscode-terminal: | `:vscode-terminal:` | `vscode/terminal` | +| :vscode-terminal-bash: | `:vscode-terminal-bash:` | `vscode/terminal-bash` | +| :vscode-terminal-cmd: | `:vscode-terminal-cmd:` | `vscode/terminal-cmd` | +| :vscode-terminal-debian: | `:vscode-terminal-debian:` | `vscode/terminal-debian` | +| :vscode-terminal-git-bash: | `:vscode-terminal-git-bash:` | `vscode/terminal-git-bash` | +| :vscode-terminal-linux: | `:vscode-terminal-linux:` | `vscode/terminal-linux` | +| :vscode-terminal-powershell: | `:vscode-terminal-powershell:` | `vscode/terminal-powershell` | +| :vscode-terminal-secure: | `:vscode-terminal-secure:` | `vscode/terminal-secure` | +| :vscode-terminal-tmux: | `:vscode-terminal-tmux:` | `vscode/terminal-tmux` | +| :vscode-terminal-ubuntu: | `:vscode-terminal-ubuntu:` | `vscode/terminal-ubuntu` | +| :vscode-text-size: | `:vscode-text-size:` | `vscode/text-size` | +| :vscode-thinking: | `:vscode-thinking:` | `vscode/thinking` | +| :vscode-three-bars: | `:vscode-three-bars:` | `vscode/three-bars` | +| :vscode-thumbsdown: | `:vscode-thumbsdown:` | `vscode/thumbsdown` | +| :vscode-thumbsdown-filled: | `:vscode-thumbsdown-filled:` | `vscode/thumbsdown-filled` | +| :vscode-thumbsup: | `:vscode-thumbsup:` | `vscode/thumbsup` | +| :vscode-thumbsup-filled: | `:vscode-thumbsup-filled:` | `vscode/thumbsup-filled` | +| :vscode-tools: | `:vscode-tools:` | `vscode/tools` | +| :vscode-trash: | `:vscode-trash:` | `vscode/trash` | +| :vscode-triangle-down: | `:vscode-triangle-down:` | `vscode/triangle-down` | +| :vscode-triangle-left: | `:vscode-triangle-left:` | `vscode/triangle-left` | +| :vscode-triangle-right: | `:vscode-triangle-right:` | `vscode/triangle-right` | +| :vscode-triangle-up: | `:vscode-triangle-up:` | `vscode/triangle-up` | +| :vscode-twitter: | `:vscode-twitter:` | `vscode/twitter` | +| :vscode-type-hierarchy: | `:vscode-type-hierarchy:` | `vscode/type-hierarchy` | +| :vscode-type-hierarchy-sub: | `:vscode-type-hierarchy-sub:` | `vscode/type-hierarchy-sub` | +| :vscode-type-hierarchy-super: | `:vscode-type-hierarchy-super:` | `vscode/type-hierarchy-super` | +| :vscode-unarchive: | `:vscode-unarchive:` | `vscode/unarchive` | +| :vscode-unfold: | `:vscode-unfold:` | `vscode/unfold` | +| :vscode-ungroup-by-ref-type: | `:vscode-ungroup-by-ref-type:` | `vscode/ungroup-by-ref-type` | +| :vscode-unlock: | `:vscode-unlock:` | `vscode/unlock` | +| :vscode-unmute: | `:vscode-unmute:` | `vscode/unmute` | +| :vscode-unverified: | `:vscode-unverified:` | `vscode/unverified` | +| :vscode-variable-group: | `:vscode-variable-group:` | `vscode/variable-group` | +| :vscode-verified: | `:vscode-verified:` | `vscode/verified` | +| :vscode-verified-filled: | `:vscode-verified-filled:` | `vscode/verified-filled` | +| :vscode-versions: | `:vscode-versions:` | `vscode/versions` | +| :vscode-vm: | `:vscode-vm:` | `vscode/vm` | +| :vscode-vm-active: | `:vscode-vm-active:` | `vscode/vm-active` | +| :vscode-vm-connect: | `:vscode-vm-connect:` | `vscode/vm-connect` | +| :vscode-vm-outline: | `:vscode-vm-outline:` | `vscode/vm-outline` | +| :vscode-vm-pending: | `:vscode-vm-pending:` | `vscode/vm-pending` | +| :vscode-vm-running: | `:vscode-vm-running:` | `vscode/vm-running` | +| :vscode-vm-small: | `:vscode-vm-small:` | `vscode/vm-small` | +| :vscode-vr: | `:vscode-vr:` | `vscode/vr` | +| :vscode-vscode: | `:vscode-vscode:` | `vscode/vscode` | +| :vscode-vscode-insiders: | `:vscode-vscode-insiders:` | `vscode/vscode-insiders` | +| :vscode-wand: | `:vscode-wand:` | `vscode/wand` | +| :vscode-warning: | `:vscode-warning:` | `vscode/warning` | +| :vscode-watch: | `:vscode-watch:` | `vscode/watch` | +| :vscode-whitespace: | `:vscode-whitespace:` | `vscode/whitespace` | +| :vscode-whole-word: | `:vscode-whole-word:` | `vscode/whole-word` | +| :vscode-window: | `:vscode-window:` | `vscode/window` | +| :vscode-window-active: | `:vscode-window-active:` | `vscode/window-active` | +| :vscode-word-wrap: | `:vscode-word-wrap:` | `vscode/word-wrap` | +| :vscode-workspace-trusted: | `:vscode-workspace-trusted:` | `vscode/workspace-trusted` | +| :vscode-workspace-unknown: | `:vscode-workspace-unknown:` | `vscode/workspace-unknown` | +| :vscode-workspace-untrusted: | `:vscode-workspace-untrusted:` | `vscode/workspace-untrusted` | +| :vscode-worktree: | `:vscode-worktree:` | `vscode/worktree` | +| :vscode-worktree-small: | `:vscode-worktree-small:` | `vscode/worktree-small` | +| :vscode-zoom-in: | `:vscode-zoom-in:` | `vscode/zoom-in` | +| :vscode-zoom-out: | `:vscode-zoom-out:` | `vscode/zoom-out` | diff --git a/inline_badges.py b/inline_badges.py new file mode 100644 index 0000000..99ca33e --- /dev/null +++ b/inline_badges.py @@ -0,0 +1,49 @@ +from __future__ import annotations + +import re +from html import escape + +from markdown.extensions import Extension +from markdown.preprocessors import Preprocessor + +SHORTCODE_RE = re.compile(r"", re.I) + +class BadgePreprocessor(Preprocessor): + def run(self, lines: list[str]) -> list[str]: + return [SHORTCODE_RE.sub(self._replace, line) for line in lines] + + def _replace(self, match: re.Match[str]) -> str: + kind, args = match.groups() + args = args.strip() + + if kind == "version": + return _badge(":material-tag-outline:", escape(args)) + + if kind == "default": + value = escape(args or "none") + return _badge(":material-water:", f"{value}") + + if kind == "flag" and args == "experimental": + return _badge(":material-test-tube:") + + return match.group(0) + + +# Формирует HTML-разметку бейджа. Иконки остаются Zensical-шорткодами +# и рендерятся штатным `pymdownx.emoji` на следующем этапе обработки Markdown. +def _badge(icon: str, text: str = "") -> str: + return "".join([ + '', + f'{icon}', + *([f'{text}'] if text else []), + '', + ]) + + +class InlineBadgeExtension(Extension): + def extendMarkdown(self, md): + md.preprocessors.register(BadgePreprocessor(md), "inline_badges", 175) + + +def makeExtension(**kwargs): + return InlineBadgeExtension(**kwargs) diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 4f0a8e6..0000000 --- a/mkdocs.yml +++ /dev/null @@ -1,142 +0,0 @@ -site_name: Документация -site_description: Описание проекта и его компонентов -site_author: Иван Иванов -copyright: Иван Иванов © 2026, MIT License - -repo_name: Репозиторий -repo_url: https://git.axenov.dev/anthony/mkdocs-boilerplate -edit_uri: src/branch/master/content/ -remote_branch: master - -docs_dir: ./content -use_directory_urls: false -watch: - - content - - snippets -extra_css: - - css/custom.css -# extra_javascript: -# - https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.js - -extra: - homepage: /docs - logo: assets/img/favicon/logo.png - favicon: assets/img/favicon/logo.png - social: - - name: Telegram - icon: simple/telegram - link: https://t.me/ - - name: YouTube - icon: simple/youtube - link: https://www.youtube.com/ - alternate: - - name: Русский - link: / - lang: ru - - name: English - link: /en/ - lang: en - -theme: - name: 'material' - language: ru - custom_dir: overrides - features: - - content.action.edit - - content.tabs.link - - navigation.footer - - navigation.indexes - - navigation.path - - navigation.sections - # - navigation.expand - - navigation.tabs - - navigation.top - - navigation.tracking - - search.suggest - - toc.follow - icon: - repo: simple/github - edit: material/pencil - view: material/eye - annotation: material/chevron-right-circle - palette: - # Автотема - - media: "(prefers-color-scheme)" - toggle: - icon: material/brightness-auto - name: Включить тёмную тему - # Тёмная тема - - scheme: slate - media: "(prefers-color-scheme: light)" - accent: teal - primary: black - toggle: - name: Включить светлую тему - icon: material/weather-sunny - # Светлая тема - - scheme: default - media: "(prefers-color-scheme: dark)" - accent: teal - primary: teal - toggle: - name: Предпочесть системную тему - icon: material/weather-night - -plugins: - - minify: - minify_html: true - - tags: - listings: true - tags_hierarchy: true - tags_hierarchy_separator: / - tags_name_property: keywords - # shadow: true - export: true - listings_toc: true - - social: - cards_layout_options: - background_color: teal - background_image: null - - search: - separator: '[\s\-\.]+' - # indexing: 'full' - -validation: - omitted_files: warn - absolute_links: warn - unrecognized_links: warn - anchors: warn - -markdown_extensions: - - admonition - - attr_list - - md_in_html - - footnotes - - pymdownx.details - - pymdownx.superfences - - pymdownx.tasklist: - clickable_checkbox: false - - pymdownx.snippets: - base_path: snippets - # auto_append: - # - abbr.md - - toc: - permalink: true - - pymdownx.tabbed: - alternate_style: true - - pymdownx.emoji: - emoji_index: !!python/name:material.extensions.emoji.twemoji - emoji_generator: !!python/name:material.extensions.emoji.to_svg - options: - custom_icons: - - overrides/.icons - -nav: - - index.md - - "Раздел 1": - - part1/page1.md - - part1/page2.md - - "Доп. сведения": - - vscode-icons.md # debug - - glossary.md - - tags.md diff --git a/snippets/config_file_path.md b/snippets/config_file_path.md index 32282ff..cec4078 100644 --- a/snippets/config_file_path.md +++ b/snippets/config_file_path.md @@ -1,4 +1,4 @@ Расположение файла конфигурации: -- :fontawesome-brands-windows: Windows: `%USERPROFILE%/.koda/config.yaml` -- :simple-linux: Linux / :simple-apple: MacOS: `$HOME/.koda/config.yaml` +- :fontawesome-brands-windows: Windows: `%USERPROFILE%/.example/config.yaml` +- :simple-linux: Linux / :simple-apple: MacOS: `$HOME/.example/config.yaml` diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 0000000..d5123a4 --- /dev/null +++ b/zensical.toml @@ -0,0 +1,211 @@ +# https://zensical.org/docs/setup/basics + +[project] +site_name = "Документация" +site_url = "https://example.com" +site_description = "Описание проекта и его компонентов" +site_author = "Иван Иванов" +copyright = "Иван Иванов © 2026, MIT License" +# copyright = "Иван Иванов © 2026, MIT License | Настройки cookie" +# repo_url = "https://git.axenov.dev/anthony/zensical-boilerplate" +# repo_name = "anthony/zensical-boilerplate" +# edit_uri = "src/branch/master/content/" + +docs_dir = "./content" +site_dir = "./site" +use_directory_urls = false +dev_addr = "localhost:8000" +watch = ["content", "snippets"] +extra_css = ["_css/extra.css"] +# extra_javascript = [ +# "_js/extra.js", +# "https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.js", +# ] + +nav = [ + "index.md", + {"Раздел 1" = [ + "part1/page1.md", + "part1/page2.md", + ]}, + # {"Debug" = [ + # "vscode-icons.md", + # "sandbox.md", + # ]}, +] + +[project.validation] # валидация контента при сборке +invalid_links = true # битые ссылки +invalid_link_anchors = true # битые якоря + +[project.extra] +homepage = "/index.html" # ссылка на логотипе +generator = false # убрать из футера ссылку на Zensical + +# [project.extra.consent] # предупреждение о куках +# title = "Уведомление о сookies" +# description = """ +# Мы используем cookie-файлы для улучшения пользовательского опыта и сбора статистики. +# Для получения дополнительной информации вы можете ознакомиться с нашей Политикой использования cookie-файлов. +# """ +# actions = [ +# "accept", +# # "reject, +# ] + +# [project.extra.analytics.feedback] +# title = "Полезна ли эта страница?" + +# [[project.extra.analytics.feedback.ratings]] +# icon = "material/emoticon-happy-outline" +# name = "Да, всё понятно" +# data = 1 +# note = "Спасибо за отзыв!" + +# [[project.extra.analytics.feedback.ratings]] +# icon = "material/emoticon-sad-outline" +# name = "Нет, нужны уточнения" +# data = 0 +# note = "Спасибо за отзыв!" + +[[project.extra.social]] # соц. кнопка в футере +name = "Новостной канал в Telegram" +icon = "simple/telegram" +link = "https://t.me/" + +[[project.extra.social]] # соц. кнопка в футере +name = "Сообщество в Telegram" +icon = "simple/telegram" +link = "https://t.me/" + +[[project.extra.social]] # соц. кнопка в футере +name = "YouTube" +icon = "simple/youtube" +link = "https://www.youtube.com/" + +[[project.extra.social]] # соц. кнопка в футере +name = "GitHub" +icon = "fontawesome/brands/git" +link = "https://git.axenov.dev/anthony/zensical-boilerplate" + +[project.extra.status] +beta = "Нестабильный функционал" + +[project.theme] # общие настройки темы +custom_dir = "./overrides" +language = "ru" +logo = "/_assets/logo-mid.png" # относительно docs_dir +# favicon = "/_assets/favicon-32x32.png" # относительно docs_dir +features = [ + # "header.autohide", # скрывать заголовок при скролле + "content.code.annotate", + "content.code.copy", + "content.code.select", + "content.footnote.tooltips", + "content.tabs.link", + "content.tooltips", + + # "navigation.instant", + # "navigation.instant.prefetch", + # "navigation.instant.progress", + "navigation.tabs", # 1 уровень навигации превращаются в табы в шапке + # "navigation.tabs.sticky", # не скрывать табы под заголовком при скролле + "navigation.sections", # заголовки секций меню сворачиваются или статичны + "navigation.tracking", # подстановка якорей страницы в урлу при скролле + # "navigation.expand", # развёрнутые подменю по умолчанию + "navigation.path", # хлебные крошки над H1 страницы + "navigation.indexes", # если есть index.md, то пункт меню разворачиваблен и открывает свой index.md + "navigation.footer", # прошлый/следующий документ в футере + "navigation.top", # кнопка возврата наверх + + "toc.follow", # подсветка загловков содержания при скролле + "search.highlight", # подсвечивать поисковый запрос на странице при переходе из поиска + + # "content.action.edit", # редактирование страницы в repo_url + # "content.action.view", # исходник страницы в repo_url +] + +[project.theme.font] +text = "Inter" +code = "Jetbrains Mono" + +[[project.theme.palette]] # Светлая тема +media = "(prefers-color-scheme: light)" +scheme = "default" +# primary = "white" +accent = "teal" +toggle.icon = "lucide/moon" +toggle.name = "Включить тёмную тему" + +[[project.theme.palette]] # Тёмная тема +media = "(prefers-color-scheme: dark)" +scheme = "slate" +# primary = "black" +accent = "teal" +toggle.icon = "lucide/sun" +toggle.name = "Включить светлую тему" + +[project.theme.icon] +repo = "fontawesome/brands/github" +edit = "material/pencil" +view = "material/eye" + +[project.theme.icon.tag] +default = "lucide/hash" +html = "fontawesome/brands/html5" +js = "fontawesome/brands/js" +css = "fontawesome/brands/css3" +vscode = "material/microsoft-visual-studio-code" +intellij = "simple/jetbrains" +jetbrains = "simple/jetbrains" +cli = "material/console" +brain = "material/brain" + +[project.extra.tags] +HTML5 = "html" +JavaScript = "js" +CSS = "css" +VSCode = "vscode" +"VS Code" = "vscode" +IntelliJ = "intellij" +JetBrains = "jetbrains" +CLI = "cli" +"модель" = "brain" +"модели" = "brain" +"ии" = "brain" +AI = "brain" +LLM = "brain" + +[project.markdown_extensions.pymdownx.highlight] +anchor_linenums = true +pygments_lang_class = true + +[project.markdown_extensions.pymdownx.emoji] +emoji_index = "zensical.extensions.emoji.twemoji" +emoji_generator = "zensical.extensions.emoji.to_svg" +options.custom_icons = ["./overrides/.icons"] + +[project.markdown_extensions.pymdownx.snippets] +base_path = "./snippets" + +[project.markdown_extensions.pymdownx.tabbed] +alternate_style = true + +[project.markdown_extensions.toc] +permalink = true +# title = "На этой странице:" + +[project.markdown_extensions.abbr] +[project.markdown_extensions.admonition] +[project.markdown_extensions.attr_list] +[project.markdown_extensions.def_list] +[project.markdown_extensions.footnotes] +[project.markdown_extensions.md_in_html] +[project.markdown_extensions.inline_badges] +[project.markdown_extensions.pymdownx.inlinehilite] +[project.markdown_extensions.pymdownx.superfences] +# [project.markdown_extensions.pymdownx.keys] +[project.markdown_extensions.pymdownx.details] +[project.markdown_extensions.pymdownx.caret] +[project.markdown_extensions.pymdownx.mark] +[project.markdown_extensions.pymdownx.tilde]