feat: add RichTextEditor component for rich text editing in articles

feat: create SanitizeBlogBodiesCommand to clean existing blog bodies according to current HTML sanitization policies

test: add AppointmentTreatmentSessionLinkTest to ensure appointment booking functionality works correctly with treatment session links
This commit is contained in:
hamed
2026-08-08 11:40:17 +03:30
parent 934405c42d
commit 47323daa27
36 changed files with 3461 additions and 12686 deletions
+10
View File
@@ -1020,6 +1020,16 @@ html, body { max-width: 100%; overflow-x: hidden; }
.wh-two-col { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--gap); align-items: start; }
@media (max-width: 1100px) { .wh-two-col { grid-template-columns: minmax(0, 1fr); } }
/* ── بدنهٔ مقاله در صفحهٔ بازبینی ───────────────────────────────────────────
جدول‌های مقاله‌ها تا ۲۰۲۶-۰۸-۰۸ ظاهرشان را از `style` inline می‌گرفتند. آن
attribute در sanitizer عمداً ممنوع است — تنها attributeِ ظاهریِ جدول که
می‌تواند بارِ اجرایی حمل کند — پس همان ظاهر اینجا، در لایهٔ درست، بازسازی
می‌شود. `border` و `cellpadding` هنوز از خودِ HTML می‌آیند. */
.blog-body table { border-collapse: collapse; width: 100%; }
.blog-body th, .blog-body td { border: 1px solid var(--border); padding: 8px; }
.blog-body th { background: var(--surface-2); font-weight: 600; }
.blog-body img { max-width: 100%; height: auto; }
/* ── CKEditor 5 ────────────────────────────────────────────────────────────
ادیتور همهٔ رنگ‌هایش را از متغیرهای --ck-color-* خودش می‌گیرد و پیش‌فرض آن‌ها
روشن است؛ بدون این نگاشت، ادیتور در [data-theme="dark"] سفید می‌ماند. */