| 1 | # Spike: RichTextKit (Topten.RichTextKit) в Intercom Skia |
| 2 | |
| 3 | **Ветка:** `feature/RichTextKit` → merge в `develop` |
| 4 | **Дата:** 2026-05-20 |
| 5 | **Статус:** принято, feature-flag снят |
| 6 | **Лицензия:** MIT — при необходимости форк по образцу [AvaloniaEdit](https://github.com/KarataevDmitry/AvaloniaEdit) |
| 7 | |
| 8 | ## Цель |
| 9 | |
| 10 | Проверить, что layout/рендер inline и block markdown в Intercom можно отдать **RichTextKit**, не переписывая весь Intercom. |
| 11 | |
| 12 | ## Что вошло в продукт |
| 13 | |
| 14 | - NuGet: `Topten.RichTextKit` 0.4.167 |
| 15 | - `Views/Chat/Skia/SkiaRichTextKitMarkdown.cs` — inline + block (`TryMeasureDocument`) |
| 16 | - `SkiaChatBubbleRenderer` — RTK для body всех `SkiaChatBubbleKind`; title/footer — `DrawText` |
| 17 | - Slash `/help` detail, composer, mono code strips — RTK без флага |
| 18 | - `SkiaChatRenderLimits` — `MaxProseBodyLines` 128, `MaxDocumentRows` 256 |
| 19 | - Тесты: `CascadeIDE.Tests/SkiaRichTextKitMarkdownTests.cs` |
| 20 | |
| 21 | ## Ограничения (ADR 0129) |
| 22 | |
| 23 | - Полный Markdig в scroll **не** цель |
| 24 | - Заголовки `##` в **сообщениях ленты** (inline path) — plain; в slash detail и `.md` help — block path с heading styles |
| 25 | - Composer: каретка — эвристика `WrapLines`, не RTK hit-test |
| 26 | |
| 27 | ## Риски |
| 28 | |
| 29 | - Транзитивный SkiaSharp 2.88 от RTK vs Avalonia 12.x — следить за runtime |
| 30 | - Релизы RTK редкие — fork MIT допустим |
| 31 | |
| 32 | ## Решение |
| 33 | |
| 34 | **Берём NuGet.** Spike завершён, `SkiaRichTextKitFeature` удалён. |
| 35 | |