fable-editor 1.2.2 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/angular/LICENSE +20 -18
- package/dist/angular/core/editor.d.ts +4 -0
- package/dist/angular/esm2022/core/editor.mjs +56 -2
- package/dist/angular/fesm2022/fable-editor.mjs +55 -1
- package/dist/angular/fesm2022/fable-editor.mjs.map +1 -1
- package/dist/core/editor.css +34 -0
- package/dist/core/editor.d.ts +4 -0
- package/dist/core/editor.d.ts.map +1 -1
- package/dist/core/index.cjs +3 -3
- package/dist/core/index.mjs +80 -46
- package/dist/react/index.cjs +11 -11
- package/dist/react/index.mjs +600 -566
- package/package.json +1 -1
- package/style.css +34 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fable-editor.mjs","sources":["../../../src/core/i18n.ts","../../../src/core/config.ts","../../../src/core/icons.ts","../../../src/core/paste-engine.ts","../../../src/core/docx-import.ts","../../../src/core/editor.ts","../../../src/angular/fable-editor.component.ts","../../../src/angular/fable-editor.module.ts","../../../src/fable-editor.ts"],"sourcesContent":["import { EditorLanguage } from './types';\r\n\r\nexport interface I18nStrings {\r\n dir: 'ltr' | 'rtl';\r\n file: string;\r\n edit: string;\r\n view: string;\r\n insert: string;\r\n format: string;\r\n tools: string;\r\n table: string;\r\n help: string;\r\n newdoc: string;\r\n preview: string;\r\n print: string;\r\n undo: string;\r\n redo: string;\r\n cut: string;\r\n copy: string;\r\n paste: string;\r\n selectall: string;\r\n fullscreen: string;\r\n sourcecode: string;\r\n wordcount: string;\r\n image: string;\r\n inserttable: string;\r\n hr: string;\r\n charmap: string;\r\n datetime: string;\r\n pagebreak: string;\r\n nbsp: string;\r\n bold: string;\r\n italic: string;\r\n underline: string;\r\n strikethrough: string;\r\n superscript: string;\r\n subscript: string;\r\n clearformat: string;\r\n rowabove: string;\r\n rowbelow: string;\r\n delrow: string;\r\n moverowup: string;\r\n moverowdown: string;\r\n colbefore: string;\r\n colafter: string;\r\n delcol: string;\r\n movecolleft: string;\r\n movecolright: string;\r\n cellbg: string;\r\n deltable: string;\r\n ltr: string;\r\n rtl: string;\r\n alignleft: string;\r\n aligncenter: string;\r\n alignright: string;\r\n alignjustify: string;\r\n align: string;\r\n numlist: string;\r\n bullist: string;\r\n forecolor: string;\r\n backcolor: string;\r\n removeformat: string;\r\n outdent: string;\r\n indent: string;\r\n fontfamily: string;\r\n fontsize: string;\r\n blocks: string;\r\n quickimage: string;\r\n quicktable: string;\r\n more: string;\r\n para: string;\r\n heading: string;\r\n pre: string;\r\n removecolor: string;\r\n currentcolor: string;\r\n statushelp: string;\r\n words: string;\r\n helpttl: string;\r\n shortcuts: string;\r\n close: string;\r\n save: string;\r\n cancel: string;\r\n srcttl: string;\r\n wcttl: string;\r\n wcwords: string;\r\n wcchars: string;\r\n pastehint: string;\r\n liststyles_ol: string[];\r\n liststyles_ul: string[];\r\n previewttl: string;\r\n tablepropsttl: string;\r\n tblwidth: string;\r\n tblcellspacing: string;\r\n tblcellpadding: string;\r\n tblborder: string;\r\n tblalign: string;\r\n tblalignleft: string;\r\n tblaligncenter: string;\r\n tblalignright: string;\r\n alignnone: string;\r\n quote: string;\r\n link: string;\r\n linkttl: string;\r\n linkurl: string;\r\n unlink: string;\r\n lineheight: string;\r\n wordspacing: string;\r\n letterspacing: string;\r\n changecase: string;\r\n lowercase: string;\r\n uppercase: string;\r\n capitalize: string;\r\n customcolor: string;\r\n normal: string;\r\n revhistory: string;\r\n revempty: string;\r\n restore: string;\r\n currentver: string;\r\n importword: string;\r\n importfail: string;\r\n restoredraft: string;\r\n draftempty: string;\r\n deleteimg: string;\r\n rotateleft: string;\r\n rotateright: string;\r\n fliphorizontal: string;\r\n flipvertical: string;\r\n cell: string;\r\n row: string;\r\n column: string;\r\n cellprops: string;\r\n rowprops: string;\r\n colprops: string;\r\n tblheight: string;\r\n valign: string;\r\n valigntop: string;\r\n valignmiddle: string;\r\n valignbottom: string;\r\n fill: string;\r\n nocell: string;\r\n uploadimg: string;\r\n imagelink: string;\r\n imageurlph: string;\r\n insertimg: string;\r\n dropimage: string;\r\n uploading: string;\r\n uploadfailed: string;\r\n template: string;\r\n tplimgleft: string;\r\n tplimgright: string;\r\n tplimgtop: string;\r\n tplimgcenter: string;\r\n deltemplate: string;\r\n video: string;\r\n quickvideo: string;\r\n deletevideo: string;\r\n uploadvideo: string;\r\n videolink: string;\r\n videourlph: string;\r\n insertvideo: string;\r\n dropvideo: string;\r\n videodlgttl: string;\r\n vidgeneral: string;\r\n vidembed: string;\r\n vidadvanced: string;\r\n vidsource: string;\r\n vidembedhint: string;\r\n vidaltsource: string;\r\n vidposter: string;\r\n emoji: string;\r\n code: string;\r\n codesample: string;\r\n codedlgttl: string;\r\n codelang: string;\r\n editcode: string;\r\n deletecode: string;\r\n copycode: string;\r\n chcat_currency: string;\r\n chcat_text: string;\r\n chcat_math: string;\r\n chcat_arrows: string;\r\n chcat_symbols: string;\r\n chcat_latin: string;\r\n chcat_arabic: string;\r\n emcat_smileys: string;\r\n emcat_people: string;\r\n emcat_animals: string;\r\n emcat_food: string;\r\n emcat_travel: string;\r\n emcat_activities: string;\r\n emcat_objects: string;\r\n emcat_symbols: string;\r\n emcat_flags: string;\r\n}\r\n\r\nexport const I18N: Record<EditorLanguage, I18nStrings> = {\r\n en: {\r\n dir: 'ltr',\r\n file: 'File',\r\n edit: 'Edit',\r\n view: 'View',\r\n insert: 'Insert',\r\n format: 'Format',\r\n tools: 'Tools',\r\n table: 'Table',\r\n help: 'Help',\r\n newdoc: 'New document',\r\n preview: 'Preview',\r\n print: 'Print…',\r\n undo: 'Undo',\r\n redo: 'Redo',\r\n cut: 'Cut',\r\n copy: 'Copy',\r\n paste: 'Paste',\r\n selectall: 'Select all',\r\n fullscreen: 'Fullscreen',\r\n sourcecode: 'Source code',\r\n wordcount: 'Word count',\r\n image: 'Image…',\r\n inserttable: 'Table',\r\n hr: 'Horizontal line',\r\n charmap: 'Special character…',\r\n datetime: 'Date/time',\r\n pagebreak: 'Page break',\r\n nbsp: 'Nonbreaking space',\r\n bold: 'Bold',\r\n italic: 'Italic',\r\n underline: 'Underline',\r\n strikethrough: 'Strikethrough',\r\n superscript: 'Superscript',\r\n subscript: 'Subscript',\r\n clearformat: 'Clear formatting',\r\n rowabove: 'Insert row before',\r\n rowbelow: 'Insert row after',\r\n delrow: 'Delete row',\r\n moverowup: 'Move row up',\r\n moverowdown: 'Move row down',\r\n colbefore: 'Insert column before',\r\n colafter: 'Insert column after',\r\n delcol: 'Delete column',\r\n movecolleft: 'Move column left',\r\n movecolright: 'Move column right',\r\n cellbg: 'Cell background',\r\n deltable: 'Delete table',\r\n ltr: 'Left to right',\r\n rtl: 'Right to left',\r\n alignleft: 'Align left',\r\n aligncenter: 'Align center',\r\n alignright: 'Align right',\r\n alignjustify: 'Justify',\r\n align: 'Align',\r\n numlist: 'Numbered list',\r\n bullist: 'Bullet list',\r\n forecolor: 'Text color',\r\n backcolor: 'Background color',\r\n removeformat: 'Clear formatting',\r\n outdent: 'Decrease indent',\r\n indent: 'Increase indent',\r\n fontfamily: 'Font family',\r\n fontsize: 'Font size',\r\n blocks: 'Blocks',\r\n quickimage: 'Insert image',\r\n quicktable: 'Insert table',\r\n more: 'More…',\r\n para: 'Paragraph',\r\n heading: 'Heading',\r\n pre: 'Preformatted',\r\n removecolor: 'Remove color',\r\n currentcolor: 'Current color',\r\n statushelp: 'Press Alt+0 for help',\r\n words: 'words',\r\n helpttl: 'Help',\r\n shortcuts: 'Handy shortcuts',\r\n close: 'Close',\r\n save: 'Save',\r\n cancel: 'Cancel',\r\n srcttl: 'Source code',\r\n wcttl: 'Word count',\r\n wcwords: 'Words',\r\n wcchars: 'Characters',\r\n pastehint: 'Use Ctrl+V / ⌘V to paste',\r\n liststyles_ol: ['Default', 'Lower alpha', 'Lower roman', 'Upper alpha', 'Upper roman'],\r\n liststyles_ul: ['Default', 'Circle', 'Square'],\r\n previewttl: 'Preview',\r\n tablepropsttl: 'Table properties',\r\n tblwidth: 'Width',\r\n tblcellspacing: 'Cell spacing',\r\n tblcellpadding: 'Cell padding',\r\n tblborder: 'Border width',\r\n tblalign: 'Alignment',\r\n tblalignleft: 'Align table left',\r\n tblaligncenter: 'Center table',\r\n tblalignright: 'Align table right',\r\n alignnone: 'None',\r\n quote: 'Blockquote',\r\n link: 'Link…',\r\n linkttl: 'Insert/edit link',\r\n linkurl: 'URL',\r\n unlink: 'Remove link',\r\n lineheight: 'Line height',\r\n wordspacing: 'Word spacing',\r\n letterspacing: 'Letter spacing',\r\n changecase: 'Change case',\r\n lowercase: 'Lowercase',\r\n uppercase: 'Uppercase',\r\n capitalize: 'Capitalize Each Word',\r\n customcolor: 'Custom color…',\r\n normal: 'Normal',\r\n revhistory: 'Revision history',\r\n revempty: 'No revisions yet',\r\n restore: 'Restore',\r\n currentver: 'Current version',\r\n importword: 'Import from Word…',\r\n importfail: 'Could not import this file. Please choose a valid .docx document.',\r\n restoredraft: 'Restore last draft',\r\n draftempty: 'No saved draft found',\r\n deleteimg: 'Delete image',\r\n rotateleft: 'Rotate left',\r\n rotateright: 'Rotate right',\r\n fliphorizontal: 'Flip horizontal',\r\n flipvertical: 'Flip vertical',\r\n cell: 'Cell',\r\n row: 'Row',\r\n column: 'Column',\r\n cellprops: 'Cell properties…',\r\n rowprops: 'Row properties…',\r\n colprops: 'Column properties…',\r\n tblheight: 'Height',\r\n valign: 'Vertical align',\r\n valigntop: 'Top',\r\n valignmiddle: 'Middle',\r\n valignbottom: 'Bottom',\r\n fill: 'Fill',\r\n nocell: 'Click inside a table cell first',\r\n uploadimg: 'Upload from computer',\r\n imagelink: 'Insert from URL',\r\n imageurlph: 'Paste image URL…',\r\n insertimg: 'Insert',\r\n dropimage: 'Drop image here',\r\n uploading: 'Uploading…',\r\n uploadfailed: 'Upload failed — click to retry',\r\n template: 'Templates',\r\n tplimgleft: 'Image left, text right',\r\n tplimgright: 'Image right, text left',\r\n tplimgtop: 'Image top, text below',\r\n tplimgcenter: 'Text top, image center',\r\n deltemplate: 'Delete template',\r\n video: 'Video',\r\n quickvideo: 'Insert video',\r\n deletevideo: 'Delete video',\r\n uploadvideo: 'Upload from computer',\r\n videolink: 'Insert from URL',\r\n videourlph: 'Paste video URL…',\r\n insertvideo: 'Insert',\r\n dropvideo: 'Drop video here',\r\n videodlgttl: 'Insert/edit video',\r\n vidgeneral: 'General',\r\n vidembed: 'Embed',\r\n vidadvanced: 'Advanced',\r\n vidsource: 'Source',\r\n vidembedhint: 'Paste your embed code below:',\r\n vidaltsource: 'Alternative source URL',\r\n vidposter: 'Media poster (Image URL)',\r\n emoji: 'Emojis…',\r\n code: 'Inline code',\r\n codesample: 'Code sample…',\r\n codedlgttl: 'Insert/edit code sample',\r\n codelang: 'Language',\r\n editcode: 'Edit code sample',\r\n deletecode: 'Delete code sample',\r\n copycode: 'Copy code',\r\n chcat_currency: 'Currency',\r\n chcat_text: 'Text & punctuation',\r\n chcat_math: 'Mathematical',\r\n chcat_arrows: 'Arrows',\r\n chcat_symbols: 'Symbols',\r\n chcat_latin: 'Extended Latin',\r\n chcat_arabic: 'Arabic',\r\n emcat_smileys: 'Smileys & emotion',\r\n emcat_people: 'People & body',\r\n emcat_animals: 'Animals & nature',\r\n emcat_food: 'Food & drink',\r\n emcat_travel: 'Travel & places',\r\n emcat_activities: 'Activities',\r\n emcat_objects: 'Objects',\r\n emcat_symbols: 'Symbols',\r\n emcat_flags: 'Flags'\r\n },\r\n ar: {\r\n dir: 'rtl',\r\n file: 'ملف',\r\n edit: 'تحرير',\r\n view: 'عرض',\r\n insert: 'إدراج',\r\n format: 'التنسيق',\r\n tools: 'الأدوات',\r\n table: 'جدول',\r\n help: 'تعليمات',\r\n newdoc: 'مستند جديد',\r\n preview: 'معاينة',\r\n print: 'طباعة…',\r\n undo: 'تراجع',\r\n redo: 'إعادة',\r\n cut: 'قص',\r\n copy: 'نسخ',\r\n paste: 'لصق',\r\n selectall: 'تحديد الكل',\r\n fullscreen: 'ملء الشاشة',\r\n sourcecode: 'الكود المصدري',\r\n wordcount: 'عدد الكلمات',\r\n image: 'صورة…',\r\n inserttable: 'جدول',\r\n hr: 'خط أفقي',\r\n charmap: 'رمز خاص…',\r\n datetime: 'التاريخ/الوقت',\r\n pagebreak: 'فاصل الصفحة',\r\n nbsp: 'مسافة غير فاصلة',\r\n bold: 'غامق',\r\n italic: 'مائل',\r\n underline: 'تسطير',\r\n strikethrough: 'يتوسطه خط',\r\n superscript: 'نص مرتفع',\r\n subscript: 'نص منخفض',\r\n clearformat: 'مسح التنسيق',\r\n rowabove: 'إدراج صف قبل',\r\n rowbelow: 'إدراج صف بعد',\r\n delrow: 'حذف الصف',\r\n moverowup: 'نقل الصف لأعلى',\r\n moverowdown: 'نقل الصف لأسفل',\r\n colbefore: 'إدراج عمود قبل',\r\n colafter: 'إدراج عمود بعد',\r\n delcol: 'حذف العمود',\r\n movecolleft: 'نقل العمود لليسار',\r\n movecolright: 'نقل العمود لليمين',\r\n cellbg: 'خلفية الخلية',\r\n deltable: 'حذف الجدول',\r\n ltr: 'من اليسار إلى اليمين',\r\n rtl: 'من اليمين إلى اليسار',\r\n alignleft: 'محاذاة لليسار',\r\n aligncenter: 'توسيط',\r\n alignright: 'محاذاة لليمين',\r\n alignjustify: 'ضبط',\r\n align: 'محاذاة',\r\n numlist: 'قائمة رقمية',\r\n bullist: 'قائمة نقطية',\r\n forecolor: 'لون النص',\r\n backcolor: 'لون الخلفية',\r\n removeformat: 'مسح التنسيق',\r\n outdent: 'إنقاص المسافة البادئة',\r\n indent: 'زيادة المسافة البادئة',\r\n fontfamily: 'عائلة الخط',\r\n fontsize: 'حجم الخط',\r\n blocks: 'الفقرات',\r\n quickimage: 'إدراج صورة',\r\n quicktable: 'إدراج جدول',\r\n more: 'المزيد…',\r\n para: 'الفقرة',\r\n heading: 'العنوان',\r\n pre: 'منسق مسبقاً',\r\n removecolor: 'إزالة اللون',\r\n currentcolor: 'اللون الحالي',\r\n statushelp: 'اضغط على Alt+0 للحصول على مساعدة',\r\n words: 'الكلمات',\r\n helpttl: 'تعليمات',\r\n shortcuts: 'اختصارات مفيدة',\r\n close: 'إغلاق',\r\n save: 'حفظ',\r\n cancel: 'إلغاء',\r\n srcttl: 'الكود المصدري',\r\n wcttl: 'عدد الكلمات',\r\n wcwords: 'الكلمات',\r\n wcchars: 'الأحرف',\r\n pastehint: 'استخدم Ctrl+V / ⌘V للصق',\r\n liststyles_ol: ['افتراضي', 'أبجدي صغير', 'روماني صغير', 'أبجدي كبير', 'روماني كبير'],\r\n liststyles_ul: ['افتراضي', 'دائرة', 'مربع'],\r\n previewttl: 'معاينة',\r\n tablepropsttl: 'خصائص الجدول',\r\n tblwidth: 'العرض',\r\n tblcellspacing: 'تباعد الخلايا',\r\n tblcellpadding: 'حشو الخلايا',\r\n tblborder: 'عرض الحدود',\r\n tblalign: 'المحاذاة',\r\n tblalignleft: 'محاذاة الجدول لليسار',\r\n tblaligncenter: 'توسيط الجدول',\r\n tblalignright: 'محاذاة الجدول لليمين',\r\n alignnone: 'بدون',\r\n quote: 'اقتباس',\r\n link: 'رابط…',\r\n linkttl: 'إدراج/تعديل رابط',\r\n linkurl: 'الرابط',\r\n unlink: 'إزالة الرابط',\r\n lineheight: 'تباعد الأسطر',\r\n wordspacing: 'تباعد الكلمات',\r\n letterspacing: 'تباعد الأحرف',\r\n changecase: 'تغيير حالة الأحرف',\r\n lowercase: 'أحرف صغيرة',\r\n uppercase: 'أحرف كبيرة',\r\n capitalize: 'تكبير أول حرف',\r\n customcolor: 'لون مخصص…',\r\n normal: 'عادي',\r\n revhistory: 'سجل المراجعات',\r\n revempty: 'لا توجد مراجعات بعد',\r\n restore: 'استعادة',\r\n currentver: 'النسخة الحالية',\r\n importword: 'استيراد من Word…',\r\n importfail: 'تعذر استيراد هذا الملف. الرجاء اختيار مستند .docx صالح.',\r\n restoredraft: 'استعادة آخر مسودة',\r\n draftempty: 'لا توجد مسودة محفوظة',\r\n deleteimg: 'حذف الصورة',\r\n rotateleft: 'تدوير لليسار',\r\n rotateright: 'تدوير لليمين',\r\n fliphorizontal: 'قلب أفقي',\r\n flipvertical: 'قلب رأسي',\r\n cell: 'خلية',\r\n row: 'صف',\r\n column: 'عمود',\r\n cellprops: 'خصائص الخلية…',\r\n rowprops: 'خصائص الصف…',\r\n colprops: 'خصائص العمود…',\r\n tblheight: 'الارتفاع',\r\n valign: 'محاذاة عمودية',\r\n valigntop: 'أعلى',\r\n valignmiddle: 'وسط',\r\n valignbottom: 'أسفل',\r\n fill: 'تعبئة',\r\n nocell: 'انقر داخل خلية جدول أولاً',\r\n uploadimg: 'رفع من الجهاز',\r\n imagelink: 'إدراج من رابط',\r\n imageurlph: 'الصق رابط الصورة…',\r\n insertimg: 'إدراج',\r\n dropimage: 'أسقط الصورة هنا',\r\n uploading: 'جارٍ الرفع…',\r\n uploadfailed: 'فشل الرفع — انقر لإعادة المحاولة',\r\n template: 'قوالب',\r\n tplimgleft: 'صورة يسار، نص يمين',\r\n tplimgright: 'صورة يمين، نص يسار',\r\n tplimgtop: 'صورة أعلى، نص أسفل',\r\n tplimgcenter: 'نص أعلى، صورة وسط',\r\n deltemplate: 'حذف القالب',\r\n video: 'فيديو',\r\n quickvideo: 'إدراج فيديو',\r\n deletevideo: 'حذف الفيديو',\r\n uploadvideo: 'رفع من الجهاز',\r\n videolink: 'إدراج من رابط',\r\n videourlph: 'الصق رابط الفيديو…',\r\n insertvideo: 'إدراج',\r\n dropvideo: 'أسقط الفيديو هنا',\r\n videodlgttl: 'إدراج/تعديل فيديو',\r\n vidgeneral: 'عام',\r\n vidembed: 'تضمين',\r\n vidadvanced: 'متقدم',\r\n vidsource: 'المصدر',\r\n vidembedhint: 'الصق كود التضمين أدناه:',\r\n vidaltsource: 'رابط مصدر بديل',\r\n vidposter: 'صورة الغلاف (رابط الصورة)',\r\n emoji: 'رموز تعبيرية…',\r\n code: 'كود مضمّن',\r\n codesample: 'عينة كود…',\r\n codedlgttl: 'إدراج/تعديل عينة كود',\r\n codelang: 'اللغة',\r\n editcode: 'تعديل عينة الكود',\r\n deletecode: 'حذف عينة الكود',\r\n copycode: 'نسخ الكود',\r\n chcat_currency: 'عملات',\r\n chcat_text: 'نص وعلامات ترقيم',\r\n chcat_math: 'رموز رياضية',\r\n chcat_arrows: 'أسهم',\r\n chcat_symbols: 'رموز',\r\n chcat_latin: 'لاتينية موسعة',\r\n chcat_arabic: 'عربية',\r\n emcat_smileys: 'وجوه ومشاعر',\r\n emcat_people: 'أشخاص وإيماءات',\r\n emcat_animals: 'حيوانات وطبيعة',\r\n emcat_food: 'طعام وشراب',\r\n emcat_travel: 'سفر وأماكن',\r\n emcat_activities: 'أنشطة',\r\n emcat_objects: 'أشياء',\r\n emcat_symbols: 'رموز',\r\n emcat_flags: 'أعلام'\r\n }\r\n};\r\n\r\nexport function getStrings(lang: EditorLanguage): I18nStrings {\r\n return I18N[lang];\r\n}\r\n","/** Transcribed group-by-group from the editor's built-in toolbar layout so that\n * `toolbar: true` (the default) renders identically to the hard-coded original. */\nexport const DEFAULT_TOOLBAR =\n 'undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | ' +\n 'bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | ' +\n 'bullist numlist | outdent indent | link blockquote code changecase lineheight wordspacing letterspacing | removeformat | blocks | ' +\n 'ltr rtl | quickimage quickvideo quicktable codesample template charmap emoji | fullscreen sourcecode';\n\n/** Transcribed from the editor's built-in menu keys so that `menubar: true` (the\n * default) renders identically to the hard-coded original. */\nexport const DEFAULT_MENUBAR = 'file edit view insert format tools table help';\n\nexport const FONTS: [string, string][] = [\n ['Andale Mono', 'andale mono,times'],\n ['Arial', 'arial,helvetica,sans-serif'],\n ['Arial Black', 'arial black,avant garde'],\n ['Book Antiqua', 'book antiqua,palatino'],\n ['Comic Sans MS', 'comic sans ms,sans-serif'],\n ['Courier New', 'courier new,courier'],\n ['Georgia', 'georgia,palatino'],\n ['Helvetica', 'helvetica'],\n ['Impact', 'impact,chicago'],\n ['Oswald', 'oswald'],\n ['Sakkal Majalla', 'sakkal majalla'],\n ['Symbol', 'symbol'],\n ['Tahoma', 'tahoma,arial,helvetica,sans-serif'],\n ['Terminal', 'terminal,monaco'],\n ['Times New Roman', 'times new roman,times'],\n ['Trebuchet MS', 'trebuchet ms,geneva'],\n ['Verdana', 'verdana,geneva'],\n ['Webdings', 'webdings'],\n ['Wingdings', 'wingdings,zapf dingbats']\n];\n\nexport const SIZES = ['8px', '9px', '10px', '11px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '36px', '48px', '72px', '96px'];\n\nexport const MIN_FONT_PX = 1;\nexport const MAX_FONT_PX = 100;\n\nexport const LINE_HEIGHTS = ['1', '1.15', '1.4', '1.5', '1.75', '2', '2.5', '3'];\n\nexport const WORD_SPACINGS = ['1px', '2px', '4px', '6px', '8px', '12px'];\n\nexport const LETTER_SPACINGS = ['0.5px', '1px', '1.5px', '2px', '3px', '4px'];\n\n/** Languages offered by the code-sample dialog: [value stored in data-lang, label]. */\nexport const CODE_LANGS: [string, string][] = [\n ['plain', 'Plain text'],\n ['html', 'HTML/XML'],\n ['css', 'CSS'],\n ['javascript', 'JavaScript'],\n ['typescript', 'TypeScript'],\n ['json', 'JSON'],\n ['python', 'Python'],\n ['java', 'Java'],\n ['csharp', 'C#'],\n ['cpp', 'C/C++'],\n ['php', 'PHP'],\n ['ruby', 'Ruby'],\n ['go', 'Go'],\n ['rust', 'Rust'],\n ['sql', 'SQL'],\n ['bash', 'Bash/Shell']\n];\n\nexport const BLOCKS: [string, string][] = [\n ['p', 'para'],\n ['h1', 'heading1'],\n ['h2', 'heading2'],\n ['h3', 'heading3'],\n ['h4', 'heading4'],\n ['h5', 'heading5'],\n ['h6', 'heading6'],\n ['pre', 'pre']\n];\n\n/** Quick-access text color chips shown directly in the toolbar. */\nexport const QUICK_COLORS = ['#F76707', '#4263EB', '#CC5DE8'];\n\n/** 25 swatches — a 5×5 grid in the picker (pastels, brights, darks, grays,\n * then pink/brown/cyan + black/white). Shared by fore/back color and cell fill. */\nexport const COLORS = [\n '#FFFFFF',\n '#F4F4F4',\n '#E8EAED',\n '#DADCE0',\n '#000000',\n\n '#F28B82',\n '#FBBC04',\n '#FFF475',\n '#CCFF90',\n '#A7FFEB',\n\n '#CBF0F8',\n '#AECBFA',\n '#D7AEFB',\n '#FDCFE8',\n '#E6C9A8',\n\n '#EA4335',\n '#FB8C00',\n '#FDD835',\n '#34A853',\n '#00ACC1',\n\n '#4285F4',\n '#5E35B1',\n '#8E24AA',\n '#C2185B',\n '#6D4C41'\n];\n\n/** Category key = i18n string key for the tab label in the picker dialogs. */\nexport interface GlyphCategory {\n key: string;\n chars: string[];\n}\n\n/** Special-character map, grouped for the two-pane picker (tabs left, glyphs right).\n * `CHARS` below is the legacy flat list and is kept exported for back-compat. */\nexport const CHAR_CATEGORIES: GlyphCategory[] = [\n {\n key: 'chcat_currency',\n chars: [\n '€','£','¥','¢','$','₹','₽','₩','₺','₴','₦','฿','₫','₪','﷼','¤',\n '₡','₱','₲','₵','₭','₮','₸','₼','₾','₿'\n ]\n },\n {\n key: 'chcat_text',\n chars: [\n '§','¶','†','‡','•','…','′','″','‰','‱','–','—','―','¡','¿','·',\n '‹','›','«','»','“','”','‘','’','„','‚','¦','ª','º',\n '‽','※','❝','❞','❮','❯'\n ]\n },\n {\n key: 'chcat_math',\n chars: [\n '°','±','×','÷','≈','≠','≤','≥','∞','µ','√','∑','∫','∂','∆','∏',\n 'π','Ω','α','β','γ','δ','ε','θ','λ','σ','φ','ψ','ω',\n '∈','∉','∪','∩','⊂','⊃','⊆','⊇','∀','∃','∅','∝','∴','∵','¬','∧','∨',\n '½','⅓','¼','¾','⅔','⅛','⅜','⅝','⅞',\n '¹','²','³','⁴','⁵','⁶','⁷','⁸','⁹','⁰',\n '₁','₂','₃','₄','₅','₆','₇','₈','₉','₀'\n ]\n },\n {\n key: 'chcat_arrows',\n chars: [\n '←','→','↑','↓','↔','↕','⇐','⇒','⇑','⇓','⇔',\n '↖','↗','↘','↙','↩','↪','↺','↻',\n '⤴','⤵','➜','➝','➞','➟','⇦','⇨','⇧','⇩'\n ]\n },\n {\n key: 'chcat_symbols',\n chars: [\n '©','®','™','℠','№','℮',\n '✓','✔','✗','✘',\n '★','☆','✦','✪',\n '♠','♣','♥','♦',\n '♪','♫','♬',\n '☀','☁','☂','☃','☾',\n '☹','☺','☻',\n '✉','✂','✎','✏',\n '☎','☏','⌛','⌚',\n '☞','☜','☝','☟'\n ]\n },\n {\n key: 'chcat_latin',\n chars: [\n 'À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï',\n 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß',\n 'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï',\n 'ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ',\n 'Œ','œ','Š','š','Ž','ž','Ł','ł'\n ]\n },\n {\n key: 'chcat_arabic',\n chars: [\n '؟','،','؛','٪','٭','ـ',\n '٠','١','٢','٣','٤','٥','٦','٧','٨','٩',\n '﴾','﴿','۞','؎',\n 'ء','آ','أ','ؤ','إ','ئ','ى','ة'\n ]\n }\n];\n\n/** Emoji map for the emoji picker — same two-pane dialog as the character map. */\nexport const EMOJI_CATEGORIES: GlyphCategory[] = [\n {\n key: 'emcat_smileys',\n chars: [\n '😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '😊', '😇', '🙂', '🙃', '😉', '😌', '😍', '🥰',\n '😘', '😋', '😛', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🥳', '😏', '😒', '😞', '😔', '😟', '😕',\n '🙁', '😣', '😫', '😩', '🥺', '😢', '😭', '😤', '😠', '😡', '🤯', '😳', '🥵', '🥶', '😱', '😨',\n '😥', '🤗', '🤔', '🤭', '🤫', '😐', '😑', '😬', '🙄', '😯', '😴', '😪', '😷', '🤒', '🤕', '🤢',\n '🤧', '😈', '💀', '👻', '👽', '🤖', '💩', '😺', '😸', '😹', '😻', '🙀'\n ]\n },\n {\n key: 'emcat_people',\n chars: [\n '👋', '🤚', '✋', '🖖', '👌', '🤏', '✌', '🤞', '🤟', '🤘', '🤙', '👈', '👉', '👆', '👇', '☝',\n '👍', '👎', '✊', '👊', '👏', '🙌', '👐', '🤲', '🤝', '🙏', '💪', '✍', '💅', '🤳', '👂', '👃',\n '👀', '👁', '🧠', '👶', '🧒', '👦', '👧', '🧑', '👨', '👩', '🧓', '👴', '👵', '👮', '👷', '💂',\n '🕵', '👸', '🤴', '👰', '🤵', '🤰', '👼', '🎅', '🦸', '🦹', '🧙', '🧚', '🧛', '🧟', '💃', '🕺',\n '🚶', '🏃', '🧘'\n ]\n },\n {\n key: 'emcat_animals',\n chars: [\n '🐶', '🐱', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼', '🐨', '🐯', '🦁', '🐮', '🐷', '🐸', '🐵', '🐔',\n '🐧', '🐦', '🐤', '🦆', '🦅', '🦉', '🐺', '🐗', '🐴', '🦄', '🐝', '🐛', '🦋', '🐌', '🐞', '🐢',\n '🐍', '🦎', '🦖', '🐙', '🦑', '🦀', '🐠', '🐟', '🐬', '🐳', '🦈', '🐊', '🐅', '🦓', '🦍', '🐘',\n '🦏', '🐪', '🦒', '🦘', '🐄', '🐎', '🐖', '🐑', '🐐', '🦌', '🐕', '🐈', '🐓', '🦃', '🦚', '🦜',\n '🦢', '🕊', '🐇', '🦔', '🌵', '🌲', '🌴', '🌱', '🌿', '☘', '🍀', '🍁', '🌸', '🌺', '🌻', '🌹',\n '🌷', '💐'\n ]\n },\n {\n key: 'emcat_food',\n chars: [\n '🍏', '🍎', '🍐', '🍊', '🍋', '🍌', '🍉', '🍇', '🍓', '🍈', '🍒', '🍑', '🥭', '🍍', '🥥', '🥝',\n '🍅', '🍆', '🥑', '🥦', '🥒', '🌶', '🌽', '🥕', '🥔', '🥐', '🍞', '🥖', '🥨', '🧀', '🥚', '🍳',\n '🥞', '🥓', '🥩', '🍗', '🍖', '🌭', '🍔', '🍟', '🍕', '🥪', '🌮', '🌯', '🥗', '🍝', '🍜', '🍲',\n '🍛', '🍣', '🍱', '🥟', '🍤', '🍚', '🍧', '🍨', '🍦', '🥧', '🧁', '🍰', '🎂', '🍮', '🍭', '🍬',\n '🍫', '🍿', '🍩', '🍪', '🥜', '🍯', '🥛', '☕', '🍵', '🥤', '🍺', '🥂', '🍷', '🍸', '🍹'\n ]\n },\n {\n key: 'emcat_travel',\n chars: [\n '🚗', '🚕', '🚙', '🚌', '🏎', '🚓', '🚑', '🚒', '🚚', '🚜', '🛵', '🏍', '🚲', '🛴', '🚔', '🚃',\n '🚄', '🚅', '🚂', '🚆', '🚇', '🚉', '✈', '🛫', '🛬', '💺', '🚁', '🚀', '🛸', '🚢', '⛵', '🚤',\n '⚓', '⛽', '🚧', '🗺', '🗿', '🗽', '🗼', '🏰', '🏯', '🎡', '🎢', '🎠', '⛲', '🏖', '🏝', '🌋',\n '⛰', '🏔', '🗻', '🏕', '⛺', '🏠', '🏡', '🏢', '🏬', '🏥', '🏦', '🏨', '🏪', '🏫', '💒', '⛪',\n '🕌', '🕍', '🕋', '⛩', '🌅', '🌄', '🌇', '🌆', '🌃', '🌉', '🌌', '🌠'\n ]\n },\n {\n key: 'emcat_activities',\n chars: [\n '⚽', '🏀', '🏈', '⚾', '🎾', '🏐', '🏉', '🎱', '🏓', '🏸', '🏒', '🏑', '🏏', '⛳', '🏹', '🎣',\n '🥊', '🥋', '⛸', '🎿', '⛷', '🏂', '🏋', '🤸', '⛹', '🤺', '🏇', '🧗', '🏄', '🏊', '🚣', '🚵',\n '🚴', '🏆', '🥇', '🥈', '🥉', '🏅', '🎖', '🎫', '🎪', '🤹', '🎭', '🎨', '🎬', '🎤', '🎧', '🎼',\n '🎹', '🥁', '🎷', '🎺', '🎸', '🎻', '🎲', '🎯', '🎳', '🎮', '🎰', '🧩'\n ]\n },\n {\n key: 'emcat_objects',\n chars: [\n '⌚', '📱', '💻', '⌨', '🖥', '🖨', '🖱', '🕹', '💽', '💾', '💿', '📀', '📷', '📸', '📹', '🎥',\n '📞', '☎', '📺', '📻', '🎙', '⏱', '⏰', '⌛', '⏳', '📡', '🔋', '🔌', '💡', '🔦', '🕯', '💸',\n '💵', '💰', '💳', '💎', '⚖', '🔧', '🔨', '⚒', '🛠', '⛏', '🔩', '⚙', '🧲', '🔫', '💣', '🔪',\n '🛡', '🔮', '🧿', '🔭', '🔬', '💊', '💉', '🌡', '🧬', '🧪', '🧹', '🧺', '🛁', '🔑', '🗝', '🚪',\n '🛋', '🛏', '🧸', '🖼', '🛍', '🛒', '🎁', '🎈', '🎀', '🎊', '🎉', '✉', '📩', '📦', '📜', '📄',\n '📊', '📈', '📉', '📅', '📋', '📁', '📰', '📓', '📚', '📖', '🔖', '🔗', '📎', '📐', '📏', '📌',\n '📍', '✂', '🖊', '✒', '🖌', '🖍', '📝', '✏', '🔍', '🔒', '🔓'\n ]\n },\n {\n key: 'emcat_symbols',\n chars: [\n '❤', '🧡', '💛', '💚', '💙', '💜', '🖤', '💔', '❣', '💕', '💞', '💓', '💗', '💖', '💘', '💝',\n '☮', '✝', '☪', '🕉', '☸', '✡', '☯', '♈', '♉', '♊', '♋', '♌', '♍', '♎', '♏', '♐',\n '♑', '♒', '♓', '⚛', '❌', '⭕', '🛑', '⛔', '🚫', '💯', '💢', '⚠', '🚸', '🔱', '⚜', '🔰',\n '♻', '✅', '❇', '✳', '❎', '🌐', '💠', '🌀', '💤', '🏧', '♿', '🚭', '❗', '❕', '❓', '❔',\n '‼', '⁉', '💲', '🔅', '🔆', '〽', 'ℹ', '🆗', '🆕', '🆓', '🆒', '🆙', '🈯', '🈚'\n ]\n },\n {\n key: 'emcat_flags',\n chars: [\n '🏁', '🚩', '🎌', '🏴', '🏳', '🇦🇪', '🇸🇦', '🇶🇦', '🇰🇼', '🇧🇭', '🇴🇲', '🇪🇬', '🇯🇴', '🇱🇧', '🇮🇳', '🇵🇰',\n '🇺🇸', '🇬🇧', '🇨🇦', '🇦🇺', '🇫🇷', '🇩🇪', '🇮🇹', '🇪🇸', '🇵🇹', '🇳🇱', '🇧🇪', '🇨🇭', '🇸🇪', '🇳🇴', '🇩🇰', '🇫🇮',\n '🇮🇪', '🇬🇷', '🇹🇷', '🇷🇺', '🇺🇦', '🇵🇱', '🇯🇵', '🇰🇷', '🇨🇳', '🇸🇬', '🇲🇾', '🇮🇩', '🇹🇭', '🇵🇭', '🇻🇳', '🇧🇷',\n '🇦🇷', '🇲🇽', '🇿🇦', '🇳🇬', '🇰🇪', '🇲🇦'\n ]\n }\n];\n\nexport const CHARS = [\n '©',\n '®',\n '™',\n '§',\n '¶',\n '†',\n '‡',\n '•',\n '…',\n '′',\n '″',\n '‰',\n '°',\n '±',\n '×',\n '÷',\n '≈',\n '≠',\n '≤',\n '≥',\n '∞',\n 'µ',\n '√',\n '∑',\n '€',\n '£',\n '¥',\n '¢',\n '←',\n '→',\n '↑',\n '↓',\n '«',\n '»',\n '“',\n '”',\n '‘',\n '’',\n '–',\n '—',\n '؟',\n '،',\n '؛',\n '٪',\n '٭',\n 'ـ',\n '٠',\n '١'\n];\n","const S = (inner: string, vb?: string) => `<svg viewBox=\"${vb || '0 0 24 24'}\">${inner}</svg>`;\n\n/** Google Material Symbols icon: solid-fill path on the -960..0/0..960 grid those exports use. */\nconst G = (path: string) => S(`<path class=\"f\" d=\"${path}\"/>`, '0 -960 960 960');\n\n/** Three-line list icon with custom markers (text glyphs) per line. */\nconst LIST = (marks: [string, string, string], fs = 7.5) =>\n S(\n '<path d=\"M10 6h10M10 12h10M10 18h10\"/>' +\n marks\n .map(\n (m, i) =>\n `<text x=\"2.5\" y=\"${8.4 + i * 6}\" font-size=\"${fs}\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\">${m}</text>`\n )\n .join('')\n );\n\nexport const IC: Record<string, string> = {\n bold: G(\n 'M272-200v-560h221q65 0 120 40t55 111q0 51-23 78.5T602-491q25 11 55.5 41t30.5 90q0 89-65 124.5T501-200H272Zm121-112h104q48 0 58.5-24.5T566-372q0-11-10.5-35.5T494-432H393v120Zm0-228h93q33 0 48-17t15-38q0-24-17-39t-44-15h-95v109Z'\n ),\n italic: G('M200-200v-100h160l120-360H320v-100h400v100H580L460-300h140v100H200Z'),\n underline: G(\n 'M200-120v-80h560v80H200Zm123-223q-56-63-56-167v-330h103v336q0 56 28 91t82 35q54 0 82-35t28-91v-336h103v330q0 104-56 167t-157 63q-101 0-157-63Z'\n ),\n strikethrough: G(\n 'M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 79t85.5 31q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-340q0 86-61.5 133T486-160ZM80-480v-80h800v80H80Zm402-326q66 0 115.5 32.5T674-674l-88 39q-9-29-33.5-52T484-710q-41 0-68 18.5T386-640h-96q2-69 54.5-117.5T482-806Z'\n ),\n undo: G('M280-200v-80h284q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l104 104-56 56-200-200 200-200 56 56-104 104h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H280Z'),\n redo: G('M396-200q-97 0-166.5-63T160-420q0-94 69.5-157T396-640h252L544-744l56-56 200 200-200 200-56-56 104-104H396q-63 0-109.5 40T240-420q0 60 46.5 100T396-280h284v80H396Z'),\n ltr: G(\n 'M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm0-280v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80ZM680-80l-56-56 64-64H120v-80h568l-64-64 56-56 160 160L680-80Z'\n ),\n rtl: G(\n 'M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm-88 160 64 64-56 56-160-160 160-160 56 56-64 64h568v80H272Zm88-440v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80Z'\n ),\n alignleft: G(\n 'M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z'\n ),\n aligncenter: G(\n 'M120-120v-80h720v80H120Zm160-160v-80h400v80H280ZM120-440v-80h720v80H120Zm160-160v-80h400v80H280ZM120-760v-80h720v80H120Z'\n ),\n alignright: G(\n 'M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z'\n ),\n alignjustify: G(\n 'M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z'\n ),\n fullscreen: G(\n 'M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z'\n ),\n clearformatic: G(\n 'm528-546-93-93-121-121h486v120H568l-40 94ZM792-56 460-388l-80 188H249l119-280L56-792l56-56 736 736-56 56Z'\n ),\n numlist: G(\n 'M120-80v-60h100v-30h-60v-60h60v-30H120v-60h120q17 0 28.5 11.5T280-280v40q0 17-11.5 28.5T240-200q17 0 28.5 11.5T280-160v40q0 17-11.5 28.5T240-80H120Zm0-280v-110q0-17 11.5-28.5T160-510h60v-30H120v-60h120q17 0 28.5 11.5T280-560v70q0 17-11.5 28.5T240-450h-60v30h100v60H120Zm60-280v-180h-60v-60h120v240h-60Zm180 440v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360Z'\n ),\n bullist: G(\n 'M360-200v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm-56.5-263.5Q120-687 120-720t23.5-56.5Q167-800 200-800t56.5 23.5Q280-753 280-720t-23.5 56.5Q233-640 200-640t-56.5-23.5Z'\n ),\n chev: S('<path d=\"M2 3.5 6 7.5 10 3.5\"/>', '0 0 12 11'),\n backcolor: G(\n 'M440-80q-33 0-56.5-23.5T360-160v-160H240q-33 0-56.5-23.5T160-400v-280q0-66 47-113t113-47h480v440q0 33-23.5 56.5T720-320H600v160q0 33-23.5 56.5T520-80h-80ZM240-560h480v-200h-40v160h-80v-160h-40v80h-80v-80H320q-33 0-56.5 23.5T240-680v120Zm0 160h480v-80H240v80Zm0 0v-80 80Z'\n ),\n outdent: G(\n 'M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm160 440L120-480l160-160v320Z'\n ),\n indent: G(\n 'M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm0 440v-320l160 160-160 160Z'\n ),\n more: S(\n '<circle class=\"f\" cx=\"5\" cy=\"12\" r=\"1.7\"/><circle class=\"f\" cx=\"12\" cy=\"12\" r=\"1.7\"/><circle class=\"f\" cx=\"19\" cy=\"12\" r=\"1.7\"/>'\n ),\n image: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z'\n ),\n uploadic: G(\n 'M440-200v-326L336-422l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Z'\n ),\n tableic: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm240-240H200v160h240v-160Zm80 0v160h240v-160H520Zm-80-80v-160H200v160h240Zm80 0h240v-160H520v160ZM200-680h560v-80H200v80Z'\n ),\n hric: S('<path d=\"M4 12h16\"/>'),\n charic: G(\n 'M120-120v-120h200q-84-45-132-125t-48-175q0-142 99-241t241-99q142 0 241 99t99 241q0 95-48 175T640-240h200v120H520v-204q78-14 129-75t51-141q0-92-64-156t-156-64q-92 0-156 64t-64 156q0 80 51 141t129 75v204H120Z'\n ),\n dateic: S(\n '<rect x=\"4\" y=\"6\" width=\"16\" height=\"14\" rx=\"1.5\"/><path d=\"M4 10h16M8 4v4M16 4v4\"/>'\n ),\n pbic: G(\n 'M240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Zm-80-440v-280q0-33 23.5-56.5T240-880h320l240 240v120h-80v-80H520v-200H240v280h-80Zm200 160v-80h240v80H360Zm320 0v-80h240v80H680Zm-640 0v-80h240v80H40Zm440-160Zm0 240Z'\n ),\n nbspic: S('<path d=\"M6 12v4h12v-4\"/>'),\n srcic: G(\n 'M240-280 40-480l200-200 56 56-143 144 143 144-56 56Zm178 132-76-24 200-640 76 24-200 640Zm302-132-56-56 143-144-143-144 56-56 200 200-200 200Z'\n ),\n prevw: G(\n 'M607.5-372.5Q660-425 660-500t-52.5-127.5Q555-680 480-680t-127.5 52.5Q300-575 300-500t52.5 127.5Q405-320 480-320t127.5-52.5Zm-204-51Q372-455 372-500t31.5-76.5Q435-608 480-608t76.5 31.5Q588-545 588-500t-31.5 76.5Q525-392 480-392t-76.5-31.5ZM214-281.5Q94-363 40-500q54-137 174-218.5T480-800q146 0 266 81.5T920-500q-54 137-174 218.5T480-200q-146 0-266-81.5ZM480-500Zm207.5 160.5Q782-399 832-500q-50-101-144.5-160.5T480-720q-113 0-207.5 59.5T128-500q50 101 144.5 160.5T480-280q113 0 207.5-59.5Z'\n ),\n printic: G(\n 'M640-640v-120H320v120h-80v-200h480v200h-80Zm-480 80h640-640Zm560 100q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460Zm-80 260v-160H320v160h320Zm80 80H240v-160H80v-240q0-51 35-85.5t85-34.5h560q51 0 85.5 34.5T880-520v240H720v160Zm80-240v-160q0-17-11.5-28.5T760-560H200q-17 0-28.5 11.5T160-520v160h80v-80h480v80h80Z'\n ),\n cutic: G(\n 'M760-120 480-400l-94 94q8 15 11 32t3 34q0 66-47 113T240-80q-66 0-113-47T80-240q0-66 47-113t113-47q17 0 34 3t32 11l94-94-94-94q-15 8-32 11t-34 3q-66 0-113-47T80-720q0-66 47-113t113-47q66 0 113 47t47 113q0 17-3 34t-11 32l494 494v40H760ZM600-520l-80-80 240-240h120v40L600-520ZM296.5-663.5Q320-687 320-720t-23.5-56.5Q273-800 240-800t-56.5 23.5Q160-753 160-720t23.5 56.5Q207-640 240-640t56.5-23.5ZM494-466q6-6 6-14t-6-14q-6-6-14-6t-14 6q-6 6-6 14t6 14q6 6 14 6t14-6ZM296.5-183.5Q320-207 320-240t-23.5-56.5Q273-320 240-320t-56.5 23.5Q160-273 160-240t23.5 56.5Q207-160 240-160t56.5-23.5Z'\n ),\n copyic: G(\n 'M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z'\n ),\n pasteic: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h167q11-35 43-57.5t70-22.5q40 0 71.5 22.5T594-840h166q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560h-80v120H280v-120h-80v560Zm308.5-571.5Q520-783 520-800t-11.5-28.5Q497-840 480-840t-28.5 11.5Q440-817 440-800t11.5 28.5Q463-760 480-760t28.5-11.5Z'\n ),\n selall: G(\n 'M280-280v-400h400v400H280Zm80-80h240v-240H360v240ZM200-200v80q-33 0-56.5-23.5T120-200h80Zm-80-80v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm80-160h-80q0-33 23.5-56.5T200-840v80Zm80 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80q0 33-23.5 56.5T760-120Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80q33 0 56.5 23.5T840-760h-80Z'\n ),\n superscriptic: G(\n 'M760-600v-80q0-17 11.5-28.5T800-720h80v-40H760v-40h120q17 0 28.5 11.5T920-760v40q0 17-11.5 28.5T880-680h-80v40h120v40H760ZM235-160l185-291-172-269h106l124 200h4l123-200h107L539-451l186 291H618L482-377h-4L342-160H235Z'\n ),\n subscriptic: G(\n 'M760-160v-80q0-17 11.5-28.5T800-280h80v-40H760v-40h120q17 0 28.5 11.5T920-320v40q0 17-11.5 28.5T880-240h-80v40h120v40H760Zm-525-80 185-291-172-269h106l124 200h4l123-200h107L539-531l186 291H618L482-457h-4L342-240H235Z'\n ),\n newic: S('<path d=\"M6 3h8l5 5v13H6z\"/><path d=\"M14 3v5h5\"/>'),\n helpic: S(\n '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M9.6 9.6a2.5 2.5 0 1 1 3.4 2.6c-.8.3-1 .9-1 1.8\"/><circle class=\"f\" cx=\"12\" cy=\"16.6\" r=\"1.1\"/>'\n ),\n wcic: S('<path d=\"M4 6h16M4 10h16M4 14h9\"/><path d=\"M15 17.5l2 2 3.6-4\"/>'),\n rowbefore: G(\n 'M200-160h560v-240H200v240Zm640 80H120v-720h160v80h-80v240h560v-240h-80v-80h160v720ZM480-480Zm0 80v-80 80Zm0 0Zm-40-240v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n rowafter: G(\n 'M200-560h560v-240H200v240Zm-80 400v-720h720v720H680v-80h80v-240H200v240h80v80H120Zm360-320Zm0-80v80-80Zm0 0ZM440-80v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n rowdelete: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM200-400v-160h560v160H200ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z'\n ),\n colbefore: G(\n 'M800-200v-560H560v560h240Zm-640 80v-160h80v80h240v-560H240v80h-80v-160h720v720H160Zm320-360Zm80 0h-80 80Zm0 0ZM160-360v-80H80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n colafter: G(\n 'M160-760v560h240v-560H160ZM80-120v-720h720v160h-80v-80H480v560h240v-80h80v160H80Zm400-360Zm-80 0h80-80Zm0 0Zm320 120v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n coldelete: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM400-200v-560h160v560H400ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z'\n ),\n tabledelete: S(\n '<rect x=\"4\" y=\"5\" width=\"16\" height=\"14\" rx=\"1.5\"/><path d=\"M4 10h16M4 14.5h16M9.5 5v14M14.5 5v14\"/><path d=\"M6.5 6.5l11 11M17.5 6.5l-11 11\" stroke-width=\"2.1\"/>'\n ),\n quote: G(\n 'm228-240 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T458-480L320-240h-92Zm360 0 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T818-480L680-240h-92ZM362.5-517.5Q380-535 380-560t-17.5-42.5Q345-620 320-620t-42.5 17.5Q260-585 260-560t17.5 42.5Q295-500 320-500t42.5-17.5Zm360 0Q740-535 740-560t-17.5-42.5Q705-620 680-620t-42.5 17.5Q620-585 620-560t17.5 42.5Q655-500 680-500t42.5-17.5ZM680-560Zm-360 0Z'\n ),\n link: G(\n 'M440-280H280q-83 0-141.5-58.5T80-480q0-83 58.5-141.5T280-680h160v80H280q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h320v80H320Zm200 160v-80h160q50 0 85-35t35-85q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 83-58.5 141.5T680-280H520Z'\n ),\n unlink: S(\n '<path d=\"M13.5 6.5l1.7-1.7a4 4 0 0 1 5.6 5.6L19 12.2\"/><path d=\"M10.5 17.5l-1.7 1.7a4 4 0 0 1-5.6-5.6L5 11.8\"/><path d=\"M4 4l16 16\"/>'\n ),\n lineheight: G(\n 'M240-160 80-320l56-56 64 62v-332l-64 62-56-56 160-160 160 160-56 56-64-62v332l64-62 56 56-160 160Zm240-40v-80h400v80H480Zm0-240v-80h400v80H480Zm0-240v-80h400v80H480Z'\n ),\n wordspacing: G(\n 'M320-80 160-240l160-160 57 56-64 64h334l-63-64 56-56 160 160L640-80l-57-56 64-64H313l63 64-56 56ZM200-480v-400h80v400h-80Zm240 0v-400h80v400h-80Zm240 0v-400h80v400h-80Z'\n ),\n caseic: G(\n 'm131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z'\n ),\n uppercaseic: G(\n 'M660-240v-248l-64 64-56-56 160-160 160 160-56 56-64-64v248h-80Zm-540 0 165-440h79l165 440h-76l-39-113H236l-40 113h-76Zm139-177h131l-65-182h-4l-62 182Z'\n ),\n lowercaseic: G(\n 'M300-240q-51 0-81-27.5T189-340q0-44 34.5-72.5T312-441q23 0 45 4t38 11v-12q0-29-20.5-47T320-503q-23 0-42 9.5T245-466l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T324-391q-32 0-50 14t-18 37q0 20 16 33t40 13Zm388 54L540-400l56-56 64 64v-248h80v248l64-64 56 56-160 160Z'\n ),\n capitalizeic: G(\n 'M344-250v-366H224v-64h308v64H412v366h-68Zm344 10q-44 0-69-25.5T594-336v-162h-54v-58h54v-87h66v87h74v58h-74v148q0 23 10.5 36t28.5 13q9 0 18.5-3.5T736-314v65q-10 5-22 7t-26 2Z'\n ),\n plus: S('<path d=\"M12 5.5v13M5.5 12h13\"/>'),\n minus: S('<path d=\"M5.5 12h13\"/>'),\n fontsizeup: G(\n 'm40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z'\n ),\n fontsizedown: G(\n 'm40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z'\n ),\n historyic: G(\n 'M480-120q-138 0-240.5-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm112-192L440-464v-216h80v184l128 128-56 56Z'\n ),\n wordic: S(\n '<path d=\"M6 3h8l5 5v13H6z\"/><path d=\"M14 3v5h5\"/><text x=\"8\" y=\"17\" font-size=\"8.5\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">W</text>'\n ),\n draftic: G(\n 'M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z'\n ),\n trash: S(\n '<path d=\"M5 7h14M10 7V5h4v2M7.5 7l1 13h7l1-13\"/>'\n ),\n templateic: S(\n '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"1.5\"/><rect x=\"6.5\" y=\"6.5\" width=\"5\" height=\"5\" rx=\".5\"/><path d=\"M14 7.5h3.5M14 10h3.5M6.5 14h11M6.5 17h11\"/>'\n ),\n tplleft: S(\n '<rect x=\"3\" y=\"5\" width=\"8\" height=\"8\" rx=\".8\"/><path d=\"M13.5 6.5H21M13.5 9.5H21M13.5 12.5H21M3 15.5h18M3 18.5h18\"/>'\n ),\n tplright: S(\n '<rect x=\"13\" y=\"5\" width=\"8\" height=\"8\" rx=\".8\"/><path d=\"M3 6.5h7.5M3 9.5h7.5M3 12.5h7.5M3 15.5h18M3 18.5h18\"/>'\n ),\n tpltop: S(\n '<rect x=\"5\" y=\"3\" width=\"14\" height=\"9\" rx=\".8\"/><path d=\"M3 15h18M3 18h18M3 21h12\"/>'\n ),\n tplcenter: S(\n '<path d=\"M3 4h18M3 7h18M3 10h12\"/><rect x=\"5\" y=\"12.5\" width=\"14\" height=\"9\" rx=\".8\"/>'\n ),\n rotateleft: S(\n '<polyline points=\"1 4 1 10 7 10\"/><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"/>'\n ),\n rotateright: S(\n '<polyline points=\"23 4 23 10 17 10\"/><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"/>'\n ),\n fliphorizontal: S(\n '<path d=\"M12 3v18\"/><path d=\"M7 8l-4 4 4 4\"/><path d=\"M17 8l4 4-4 4\"/>'\n ),\n flipvertical: S(\n '<path d=\"M3 12h18\"/><path d=\"M8 7l4-4 4 4\"/><path d=\"M8 17l4 4 4-4\"/>'\n ),\n check: S('<path d=\"M5 12.5 9.5 17 19 7\"/>'),\n palette: S(\n '<path d=\"M12 3a9 9 0 1 0 0 18h1.2a2 2 0 0 0 2-2 2 2 0 0 1 2-2H18a3 3 0 0 0 3-3c0-6.1-4.5-11-9-11z\"/><circle class=\"f\" cx=\"7.8\" cy=\"10.2\" r=\"1.3\"/><circle class=\"f\" cx=\"11.6\" cy=\"7.3\" r=\"1.3\"/><circle class=\"f\" cx=\"15.8\" cy=\"9.6\" r=\"1.3\"/><circle class=\"f\" cx=\"9\" cy=\"14.8\" r=\"1.3\"/>'\n ),\n ul_circle: G(\n 'M280-600v-80h560v80H280Zm0 160v-80h560v80H280Zm0 160v-80h560v80H280ZM160-600q-17 0-28.5-11.5T120-640q0-17 11.5-28.5T160-680q17 0 28.5 11.5T200-640q0 17-11.5 28.5T160-600Zm0 160q-17 0-28.5-11.5T120-480q0-17 11.5-28.5T160-520q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440Zm0 160q-17 0-28.5-11.5T120-320q0-17 11.5-28.5T160-360q17 0 28.5 11.5T200-320q0 17-11.5 28.5T160-280Z'\n ),\n ul_square: G(\n 'M80-160v-160h160v160H80Zm240 0v-160h560v160H320ZM80-400v-160h160v160H80Zm240 0v-160h560v160H320ZM80-640v-160h160v160H80Zm240 0v-160h560v160H320Z'\n ),\n ol_alpha: LIST(['a', 'b', 'c']),\n ol_roman: LIST(['i', 'ii', 'iii'], 6.5),\n ol_alphau: LIST(['A', 'B', 'C']),\n ol_romanu: LIST(['I', 'II', 'III'], 6.5),\n video: S('<rect x=\"3\" y=\"6\" width=\"13\" height=\"12\" rx=\"1.5\"/><path d=\"M16 10l5-3v10l-5-3z\"/>'),\n editic: S('<path d=\"M4 20l1-4.5L15.5 5 19 8.5 8.5 19 4 20z\"/><path d=\"M13.5 6.5l4 4\"/>'),\n letterspacing: S(\n '<text x=\"2.5\" y=\"13\" font-size=\"12\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">A</text><text x=\"13\" y=\"13\" font-size=\"12\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">B</text><path d=\"M7 18.5h10\"/><path class=\"f\" d=\"M7.5 18.5 4.5 16.6v3.8z\"/><path class=\"f\" d=\"M16.5 18.5l3-1.9v3.8z\"/>'\n ),\n emojiic: S(\n '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8.6 14.3a4.6 4.6 0 0 0 6.8 0\"/><path d=\"M9.2 9.6v.7M14.8 9.6v.7\"/>'\n ),\n inlinecodeic: S('<path d=\"M8.5 8 4.5 12l4 4M15.5 8l4 4-4 4\"/><path d=\"M13 6l-2 12\"/>'),\n moverowup: S('<rect x=\"4\" y=\"15.5\" width=\"16\" height=\"5\" rx=\"1\"/><path d=\"M12 12.5V4M8.5 7.5 12 4l3.5 3.5\"/>'),\n moverowdown: S('<rect x=\"4\" y=\"3.5\" width=\"16\" height=\"5\" rx=\"1\"/><path d=\"M12 11.5V20M8.5 16.5 12 20l3.5-3.5\"/>'),\n movecolleft: S('<rect x=\"15.5\" y=\"4\" width=\"5\" height=\"16\" rx=\"1\"/><path d=\"M12.5 12H4M7.5 8.5 4 12l3.5 3.5\"/>'),\n movecolright: S('<rect x=\"3.5\" y=\"4\" width=\"5\" height=\"16\" rx=\"1\"/><path d=\"M11.5 12H20M16.5 8.5 20 12l-3.5 3.5\"/>'),\n codesampleic: S(\n '<rect x=\"3.5\" y=\"4\" width=\"17\" height=\"16\" rx=\"2\"/><path d=\"M3.5 8.5h17\"/><path d=\"M9.5 12 7 14.25l2.5 2.25M14.5 12l2.5 2.25-2.5 2.25\"/>'\n )\n};\n\nexport const TXT = (html: string) => `<span class=\"txt\">${html}</span>`;\n","const ALLOWED_TAGS = new Set([\n 'p',\n 'div',\n 'span',\n 'br',\n 'hr',\n 'a',\n 'b',\n 'strong',\n 'i',\n 'em',\n 'u',\n 's',\n 'strike',\n 'sub',\n 'sup',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'code',\n 'ul',\n 'ol',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'tr',\n 'td',\n 'th',\n 'caption',\n 'colgroup',\n 'col',\n 'img',\n 'figure',\n 'figcaption',\n 'mark'\n]);\n\nconst ALLOWED_STYLES = new Set([\n 'text-align',\n 'direction',\n 'unicode-bidi',\n 'font-weight',\n 'font-style',\n 'text-decoration',\n 'text-decoration-line',\n 'color',\n 'background-color',\n 'background',\n 'background-image',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'font-size',\n 'font-family',\n 'line-height',\n 'letter-spacing',\n 'vertical-align',\n 'text-indent',\n 'margin',\n 'margin-top',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-inline-start',\n 'margin-inline-end',\n 'padding',\n 'padding-top',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'width',\n 'height',\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height',\n 'border',\n 'border-top',\n 'border-right',\n 'border-bottom',\n 'border-left',\n 'border-color',\n 'border-style',\n 'border-width',\n 'border-radius',\n 'border-collapse',\n 'border-spacing',\n 'table-layout',\n 'float',\n 'display',\n 'box-sizing',\n 'list-style-type',\n 'white-space'\n]);\n\nconst ALLOWED_ATTRS: Record<string, string[]> = {\n '*': ['dir', 'lang', 'colspan', 'rowspan'],\n a: ['href', 'target', 'rel', 'title'],\n img: ['src', 'alt', 'width', 'height', 'title'],\n col: ['span', 'width'],\n td: ['width', 'valign'],\n th: ['width', 'valign'],\n table: ['width', 'cellpadding', 'cellspacing']\n};\n\nexport interface StyleMap {\n [key: string]: string;\n}\n\nexport function styleMap(el: Element): StyleMap {\n const map: StyleMap = {};\n const raw = el.getAttribute && el.getAttribute('style');\n if (!raw) return map;\n raw.split(';').forEach((p) => {\n const i = p.indexOf(':');\n if (i < 1) return;\n map[p.slice(0, i).trim().toLowerCase()] = p.slice(i + 1).trim();\n });\n return map;\n}\n\nfunction preClean(html: string): string {\n return html\n .replace(/<!--\\[if !supportLists\\]-->([\\s\\S]*?)<!--\\[endif\\]-->/gi, '$1')\n .replace(/<!--\\[if !supportLists\\]>([\\s\\S]*?)<!\\[endif\\]-->/gi, '$1')\n .replace(/<!\\[if !supportLists\\]>([\\s\\S]*?)<!\\[endif\\]>/gi, '$1')\n .replace(/<!--\\[if [\\s\\S]*?<!\\[endif\\]-->/gi, '')\n .replace(/<!--[\\s\\S]*?-->/g, '')\n .replace(/<(script|style|xml|title)[\\s\\S]*?<\\/\\1>/gi, '')\n .replace(/<\\/?(meta|link)[^>]*>/gi, '')\n .replace(/<\\?xml[\\s\\S]*?\\?>/gi, '')\n .replace(/<\\/?(o|v|w|m|st1):[^>]*>/gi, '');\n}\n\ninterface MarkerInfo {\n ordered: boolean;\n style?: string;\n}\n\nfunction markerType(mt: string): MarkerInfo {\n if (/^[0-9]+[\\.\\)،]/.test(mt)) return { ordered: true };\n if (/^[٠-٩۰-۹]+/.test(mt)) return { ordered: true, style: 'arabic-indic' };\n if (/^[ivxlc]{2,}[\\.\\)]/.test(mt)) return { ordered: true, style: 'lower-roman' };\n if (/^[IVXLC]{2,}[\\.\\)]/.test(mt)) return { ordered: true, style: 'upper-roman' };\n if (/^[a-z][\\.\\)]/.test(mt)) return { ordered: true, style: 'lower-alpha' };\n if (/^[A-Z][\\.\\)]/.test(mt)) return { ordered: true, style: 'upper-alpha' };\n if (/^[ء-ي][\\.\\)،-]/.test(mt)) return { ordered: true, style: 'arabic-indic' };\n return { ordered: false };\n}\n\nfunction rebuildWordLists(doc: Document): void {\n const isListP = (p: Element) => {\n const s = (p.getAttribute('style') || '') + ' ' + (p.className || '');\n return /mso-list\\s*:(?!\\s*ignore)/i.test(s) || /MsoListParagraph/i.test(s);\n };\n const groups: HTMLParagraphElement[][] = [];\n let cur: HTMLParagraphElement[] | null = null;\n Array.from(doc.body.querySelectorAll('p')).forEach((p) => {\n if (!isListP(p)) {\n cur = null;\n return;\n }\n const prev = p.previousElementSibling;\n if (cur && prev && cur[cur.length - 1] === prev) cur.push(p);\n else {\n cur = [p];\n groups.push(cur);\n }\n });\n groups.forEach((group) => {\n const stack: { list: HTMLOListElement | HTMLUListElement; level: number }[] = [];\n const rootAnchor = group[0];\n group.forEach((p) => {\n const style = p.getAttribute('style') || '';\n const level = +(style.match(/level(\\d+)/i)?.[1] || 1);\n const marker = Array.from(p.querySelectorAll('span')).find((sp) =>\n /mso-list\\s*:\\s*ignore/i.test(sp.getAttribute('style') || '')\n );\n const mt = marker\n ? marker.textContent?.trim() || ''\n : (p.textContent?.trim().match(/^\\S{1,4}/) || [''])[0];\n const { ordered, style: listStyle } = markerType(mt);\n if (marker) marker.remove();\n while (stack.length && stack[stack.length - 1].level > level) stack.pop();\n if (!stack.length || stack[stack.length - 1].level < level) {\n const list = doc.createElement(ordered ? 'ol' : 'ul');\n if (ordered && listStyle) list.style.listStyleType = listStyle;\n if (stack.length) {\n const par = stack[stack.length - 1].list;\n (par.lastElementChild || par).appendChild(list);\n } else {\n rootAnchor.parentNode!.insertBefore(list, rootAnchor);\n }\n stack.push({ list, level });\n }\n const li = doc.createElement('li');\n const keep = styleMap(p);\n const kept = ['text-align', 'direction', 'unicode-bidi', 'color', 'font-size', 'font-family', 'background-color']\n .filter((k) => keep[k])\n .map((k) => k + ':' + keep[k])\n .join(';');\n if (kept) li.setAttribute('style', kept);\n if (p.getAttribute('dir')) li.setAttribute('dir', p.getAttribute('dir')!);\n while (p.firstChild) li.appendChild(p.firstChild);\n stack[stack.length - 1].list.appendChild(li);\n p.remove();\n });\n });\n}\n\nfunction fixGoogleDocs(doc: Document): void {\n doc.querySelectorAll('b[id^=\"docs-internal-guid\"]').forEach((b) => {\n while (b.firstChild) b.parentNode!.insertBefore(b.firstChild, b);\n b.remove();\n });\n}\n\nfunction fixLegacyAttrs(doc: Document): void {\n doc.querySelectorAll('table').forEach((tb) => {\n const htmlTb = tb as HTMLElement;\n if (!styleMap(htmlTb)['border-collapse']) htmlTb.style.borderCollapse = 'collapse';\n });\n doc.querySelectorAll('[align]').forEach((el) => {\n const htmlEl = el as HTMLElement;\n const v = htmlEl.getAttribute('align')!.toLowerCase();\n if (htmlEl.tagName.toLowerCase() === 'table') {\n if (v === 'center') {\n htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';\n htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';\n } else if (v === 'right') htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';\n else if (v === 'left') htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';\n } else if (['left', 'right', 'center', 'justify'].includes(v)) {\n htmlEl.style.textAlign = htmlEl.style.textAlign || v;\n // Word aligns tables by wrapping them in <div align=...>; text-align\n // does not move a table box, so mirror the alignment onto the table.\n Array.from(htmlEl.children).forEach((ch) => {\n if (ch.tagName.toLowerCase() !== 'table') return;\n const tb = ch as HTMLElement;\n if (v === 'center') {\n tb.style.marginLeft = tb.style.marginLeft || 'auto';\n tb.style.marginRight = tb.style.marginRight || 'auto';\n } else if (v === 'right') tb.style.marginLeft = tb.style.marginLeft || 'auto';\n else if (v === 'left') tb.style.marginRight = tb.style.marginRight || 'auto';\n });\n }\n htmlEl.removeAttribute('align');\n });\n doc.querySelectorAll('center table').forEach((tb) => {\n const htmlTb = tb as HTMLElement;\n htmlTb.style.marginLeft = htmlTb.style.marginLeft || 'auto';\n htmlTb.style.marginRight = htmlTb.style.marginRight || 'auto';\n });\n doc.querySelectorAll('[bgcolor]').forEach((el) => {\n const htmlEl = el as HTMLElement;\n htmlEl.style.backgroundColor = htmlEl.style.backgroundColor || htmlEl.getAttribute('bgcolor')!;\n htmlEl.removeAttribute('bgcolor');\n });\n}\n\nfunction sanitize(node: Node, doc: Document): void {\n Array.from(node.childNodes).forEach((child) => {\n if (child.nodeType === Node.COMMENT_NODE) {\n child.remove();\n return;\n }\n if (child.nodeType !== Node.ELEMENT_NODE) return;\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n if (!ALLOWED_TAGS.has(tag)) {\n if (tag === 'font') {\n const span = doc.createElement('span');\n if (el.getAttribute('style')) span.setAttribute('style', el.getAttribute('style')!);\n if (el.getAttribute('color')) span.style.color = el.getAttribute('color')!;\n if (el.getAttribute('face')) span.style.fontFamily = el.getAttribute('face')!;\n const sz = el.getAttribute('size');\n if (sz && !span.style.fontSize) {\n const szMap: Record<string, string> = {\n '1': '8pt',\n '2': '10pt',\n '3': '12pt',\n '4': '14pt',\n '5': '18pt',\n '6': '24pt',\n '7': '36pt'\n };\n if (szMap[sz]) span.style.fontSize = szMap[sz];\n }\n while (el.firstChild) span.appendChild(el.firstChild);\n el.replaceWith(span);\n sanitize(span, doc);\n return;\n }\n sanitize(el, doc);\n while (el.firstChild) el.parentNode!.insertBefore(el.firstChild, el);\n el.remove();\n return;\n }\n const allowed = new Set([...(ALLOWED_ATTRS['*'] || []), ...(ALLOWED_ATTRS[tag] || [])]);\n Array.from(el.attributes).forEach((a) => {\n const n = a.name.toLowerCase();\n if (n !== 'style' && !allowed.has(n)) el.removeAttribute(a.name);\n });\n if (tag === 'a') {\n const href = el.getAttribute('href') || '';\n if (!/^(https?:|mailto:|tel:|#)/i.test(href)) el.removeAttribute('href');\n }\n if (tag === 'img') {\n const src = el.getAttribute('src') || '';\n if (!/^(https?:|data:image\\/|blob:)/i.test(src)) {\n const ph = doc.createElement('span');\n ph.textContent = '[local image — paste it separately]';\n ph.setAttribute('style', 'color:#a33;font-style:italic;font-size:12px');\n el.replaceWith(ph);\n return;\n }\n }\n const styles = styleMap(el);\n const kept: string[] = [];\n for (const [k, v] of Object.entries(styles)) {\n if (!ALLOWED_STYLES.has(k)) continue;\n if (/expression|javascript|url\\s*\\(\\s*['\"]?\\s*file:/i.test(v)) continue;\n if (k === 'font-weight' && /^(400|normal)$/i.test(v)) continue;\n if (k === 'font-style' && /^normal$/i.test(v)) continue;\n if (k === 'text-decoration' && /^none$/i.test(v)) continue;\n kept.push(k + ':' + v);\n }\n if (kept.length) el.setAttribute('style', kept.join(';'));\n else el.removeAttribute('style');\n el.removeAttribute('class');\n sanitize(el, doc);\n if (tag === 'span' && !el.attributes.length) {\n while (el.firstChild) el.parentNode!.insertBefore(el.firstChild, el);\n el.remove();\n }\n });\n}\n\ninterface StyleRule {\n sel: string;\n decls: [string, string][];\n}\n\nfunction extractStyleRules(raw: string): StyleRule[] {\n const rules: StyleRule[] = [];\n const re = /<style[^>]*>([\\s\\S]*?)<\\/style>/gi;\n let m: RegExpExecArray | null;\n while ((m = re.exec(raw))) {\n let css = m[1].replace(/<!--|-->/g, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n css = css.replace(/@media[^{]*\\{(?:[^{}]*\\{[^{}]*\\})*[^{}]*\\}/gi, '');\n css = css.replace(/@[\\w-]+[^{]*\\{[^{}]*\\}/g, '');\n let rm: RegExpExecArray | null;\n const rre = /([^{}]+)\\{([^}]*)\\}/g;\n while ((rm = rre.exec(css))) {\n const decls = rm[2]\n .split(';')\n .map((d) => {\n const i = d.indexOf(':');\n if (i < 1) return null;\n return [d.slice(0, i).trim().toLowerCase(), d.slice(i + 1).trim()] as [string, string];\n })\n .filter((d): d is [string, string] => !!d && !!d[1]);\n if (!decls.length) continue;\n rm[1]\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s && !s.startsWith('@'))\n .forEach((sel) => rules.push({ sel, decls }));\n }\n }\n return rules;\n}\n\nfunction applyStyleRules(doc: Document, rules: StyleRule[]): void {\n if (!rules.length) return;\n const addMap = new Map<Element, { [k: string]: string }>();\n rules.forEach(({ sel, decls }) => {\n let els: NodeListOf<Element>;\n try {\n els = doc.querySelectorAll(sel);\n } catch (e) {\n return;\n }\n els.forEach((el) => {\n let m = addMap.get(el);\n if (!m) {\n m = {};\n addMap.set(el, m);\n }\n decls.forEach(([k, v]) => {\n m![k] = v;\n });\n });\n });\n addMap.forEach((m, el) => {\n const have = styleMap(el);\n const hasDir = el.hasAttribute('dir');\n const hasAlign = el.hasAttribute('align');\n const add = Object.entries(m).filter(([k]) => {\n if (k in have) return false;\n if ((k === 'direction' || k === 'unicode-bidi') && hasDir) return false;\n if (k === 'text-align' && (hasAlign || hasDir)) return false;\n if ((k === 'background' || k === 'background-color') && el.hasAttribute('bgcolor')) return false;\n return true;\n });\n if (!add.length) return;\n const prefix = add.map(([k, v]) => k + ':' + v).join(';');\n const cur = el.getAttribute('style');\n el.setAttribute('style', cur ? prefix + ';' + cur : prefix);\n });\n}\n\nfunction normalizeArabicPresentation(s: string): string {\n return s.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g, (m) => m.normalize('NFKC'));\n}\n\nfunction normalizeArabicText(doc: Document): void {\n const w = doc.createTreeWalker(doc.body, NodeFilter.SHOW_TEXT, null);\n let n: Node | null;\n while ((n = w.nextNode()))\n if (/[ﭐ-﷿ﹰ-ﻼ]/.test(n.nodeValue || '')) n.nodeValue = normalizeArabicPresentation(n.nodeValue || '');\n}\n\nexport function cleanPastedHTML(raw: string, editorDir: 'ltr' | 'rtl' = 'ltr'): string {\n const cssRules = extractStyleRules(raw);\n const doc = new DOMParser().parseFromString(preClean(raw), 'text/html');\n applyStyleRules(doc, cssRules);\n if (/class=\"?Mso|mso-|urn:schemas-microsoft-com/i.test(doc.body.innerHTML)) rebuildWordLists(doc);\n fixGoogleDocs(doc);\n fixLegacyAttrs(doc);\n sanitize(doc.body, doc);\n normalizeArabicText(doc);\n const emptyP = (el: Element | null) => el && el.tagName === 'P' && !el.textContent?.trim() && !el.querySelector('img,table');\n while (emptyP(doc.body.firstElementChild)) doc.body.firstElementChild!.remove();\n while (emptyP(doc.body.lastElementChild)) doc.body.lastElementChild!.remove();\n return doc.body.innerHTML.trim();\n}\n\nexport function normalizeTextPaste(raw: string): string {\n const txt = normalizeArabicPresentation(raw).replace(/\\r/g, '');\n const esc = (s: string) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n if (/\\n/.test(txt)) {\n return txt\n .split(/\\n{2,}/)\n .map((par) => `<p dir=\"auto\">${esc(par).replace(/\\n/g, '<br>') || '<br>'}</p>`)\n .join('');\n }\n return esc(txt);\n}\n","/* Minimal .docx → HTML converter with no dependencies.\n Parses the ZIP container manually and inflates entries with the browser's\n DecompressionStream, then maps WordprocessingML to editor-friendly HTML:\n headings, run formatting, colors, hyperlinks, lists, tables and images. */\n\ninterface ZipEntry {\n name: string;\n method: number;\n compSize: number;\n localOffset: number;\n}\n\nfunction parseZip(buf: ArrayBuffer): Map<string, ZipEntry> {\n const d = new DataView(buf);\n const entries = new Map<string, ZipEntry>();\n // find End Of Central Directory record (sig 0x06054b50), scanning back over the comment\n let eocd = -1;\n for (let i = buf.byteLength - 22; i >= Math.max(0, buf.byteLength - 22 - 0xffff); i--) {\n if (d.getUint32(i, true) === 0x06054b50) {\n eocd = i;\n break;\n }\n }\n if (eocd < 0) throw new Error('EOCD not found');\n const count = d.getUint16(eocd + 10, true);\n let p = d.getUint32(eocd + 16, true);\n const utf8 = new TextDecoder();\n for (let i = 0; i < count; i++) {\n if (d.getUint32(p, true) !== 0x02014b50) break;\n const method = d.getUint16(p + 10, true);\n const compSize = d.getUint32(p + 20, true);\n const nameLen = d.getUint16(p + 28, true);\n const extraLen = d.getUint16(p + 30, true);\n const commentLen = d.getUint16(p + 32, true);\n const localOffset = d.getUint32(p + 42, true);\n const name = utf8.decode(new Uint8Array(buf, p + 46, nameLen));\n entries.set(name, { name, method, compSize, localOffset });\n p += 46 + nameLen + extraLen + commentLen;\n }\n return entries;\n}\n\nasync function readEntry(buf: ArrayBuffer, e: ZipEntry): Promise<Uint8Array> {\n const d = new DataView(buf, e.localOffset);\n if (d.getUint32(0, true) !== 0x04034b50) throw new Error('Bad local header');\n const nameLen = d.getUint16(26, true);\n const extraLen = d.getUint16(28, true);\n const start = e.localOffset + 30 + nameLen + extraLen;\n const comp = new Uint8Array(buf.slice(start, start + e.compSize));\n if (e.method === 0) return comp;\n if (e.method !== 8) throw new Error('Unsupported compression method ' + e.method);\n const stream = new Blob([comp as BlobPart]).stream().pipeThrough(new DecompressionStream('deflate-raw'));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n\n/* ------------------------------------------------------------- helpers */\nconst esc = (s: string) =>\n s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n\nconst kids = (el: Element, name: string): Element[] =>\n Array.from(el.children).filter((c) => c.localName === name);\n\nconst kid = (el: Element, ...path: string[]): Element | null => {\n let cur: Element | null = el;\n for (const name of path) {\n if (!cur) return null;\n cur = Array.from(cur.children).find((c) => c.localName === name) || null;\n }\n return cur;\n};\n\nconst val = (el: Element | null, attrName = 'val'): string => {\n if (!el) return '';\n for (const a of Array.from(el.attributes)) {\n if (a.localName === attrName) return a.value;\n }\n return '';\n};\n\n/** A toggle property like <w:b/> is on unless val is explicitly false/0. */\nconst flagOn = (rPr: Element | null, name: string): boolean => {\n const el = rPr ? kid(rPr, name) : null;\n if (!el) return false;\n const v = val(el);\n return v !== 'false' && v !== '0';\n};\n\nconst HIGHLIGHTS: Record<string, string> = {\n yellow: '#FFFF00',\n green: '#00FF00',\n cyan: '#00FFFF',\n magenta: '#FF00FF',\n blue: '#0000FF',\n red: '#FF0000',\n darkBlue: '#00008B',\n darkCyan: '#008B8B',\n darkGreen: '#006400',\n darkMagenta: '#8B008B',\n darkRed: '#8B0000',\n darkYellow: '#808000',\n darkGray: '#A9A9A9',\n lightGray: '#D3D3D3',\n black: '#000000',\n white: '#FFFFFF'\n};\n\nconst IMG_MIME: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n bmp: 'image/bmp',\n webp: 'image/webp'\n};\n\nfunction toBase64(bytes: Uint8Array): string {\n let bin = '';\n for (let i = 0; i < bytes.length; i += 0x8000) {\n bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n }\n return btoa(bin);\n}\n\n/* ------------------------------------------------------------- converter */\nclass DocxConverter {\n constructor(\n private rels: Map<string, string>,\n private images: Map<string, string>,\n private numFmt: Map<string, 'ul' | 'ol'>\n ) {}\n\n convertBody(body: Element): string {\n let html = '';\n // stack of open lists for nested numbering\n let listStack: Array<'ul' | 'ol'> = [];\n const closeLists = (depth: number) => {\n while (listStack.length > depth) html += `</${listStack.pop()}>`;\n };\n for (const child of Array.from(body.children)) {\n if (child.localName === 'p') {\n const list = this.paraList(child);\n if (list) {\n const depth = list.ilvl + 1;\n while (listStack.length > depth) html += `</${listStack.pop()}>`;\n if (listStack.length === depth && listStack[depth - 1] !== list.type) {\n html += `</${listStack.pop()}>`;\n }\n while (listStack.length < depth) {\n html += `<${list.type}>`;\n listStack.push(list.type);\n }\n html += `<li>${this.runsOf(child) || '<br>'}</li>`;\n continue;\n }\n closeLists(0);\n html += this.convertPara(child);\n } else if (child.localName === 'tbl') {\n closeLists(0);\n html += this.convertTable(child);\n } else if (child.localName === 'sectPr') {\n // section properties — no visual content\n }\n }\n closeLists(0);\n return html || '<p><br></p>';\n }\n\n private paraList(p: Element): { type: 'ul' | 'ol'; ilvl: number } | null {\n const numPr = kid(p, 'pPr', 'numPr');\n if (!numPr) return null;\n const numId = val(kid(numPr, 'numId'));\n if (!numId || numId === '0') return null;\n const ilvl = parseInt(val(kid(numPr, 'ilvl')) || '0', 10) || 0;\n return { type: this.numFmt.get(numId) || 'ul', ilvl: Math.min(ilvl, 8) };\n }\n\n private convertPara(p: Element): string {\n const pPr = kid(p, 'pPr');\n const style = val(kid(p, 'pPr', 'pStyle'));\n let tag = 'p';\n const m = /^Heading([1-6])$/i.exec(style);\n if (m) tag = 'h' + m[1];\n else if (/^Title$/i.test(style)) tag = 'h1';\n const css: string[] = [];\n const jc = val(kid(p, 'pPr', 'jc'));\n if (jc === 'center') css.push('text-align:center');\n else if (jc === 'right' || jc === 'end') css.push('text-align:right');\n else if (jc === 'both' || jc === 'distribute') css.push('text-align:justify');\n if (pPr && kid(pPr, 'bidi')) css.push('direction:rtl');\n const inner = this.runsOf(p);\n const attrs = css.length ? ` style=\"${css.join(';')}\"` : '';\n return `<${tag}${attrs}>${inner || '<br>'}</${tag}>`;\n }\n\n private runsOf(el: Element): string {\n let html = '';\n for (const child of Array.from(el.children)) {\n if (child.localName === 'r') html += this.convertRun(child);\n else if (child.localName === 'hyperlink') {\n let href = this.rels.get(val(child, 'id')) || '';\n const anchor = val(child, 'anchor');\n if (!href && anchor) href = '#' + anchor;\n const inner = this.runsOf(child);\n html += href ? `<a href=\"${esc(href)}\">${inner}</a>` : inner;\n } else if (child.localName === 'smartTag' || child.localName === 'ins') {\n html += this.runsOf(child);\n }\n }\n return html;\n }\n\n private convertRun(r: Element): string {\n const rPr = kid(r, 'rPr');\n let text = '';\n for (const child of Array.from(r.children)) {\n if (child.localName === 't') text += esc(child.textContent || '');\n else if (child.localName === 'br' || child.localName === 'cr') text += '<br>';\n else if (child.localName === 'tab') text += ' ';\n else if (child.localName === 'drawing' || child.localName === 'pict' || child.localName === 'object') {\n text += this.convertImage(child);\n }\n }\n if (!text) return '';\n const css: string[] = [];\n const color = val(rPr ? kid(rPr, 'color') : null);\n if (color && color !== 'auto') css.push('color:#' + color);\n const highlight = val(rPr ? kid(rPr, 'highlight') : null);\n if (highlight && HIGHLIGHTS[highlight]) css.push('background-color:' + HIGHLIGHTS[highlight]);\n const sz = parseFloat(val(rPr ? kid(rPr, 'sz') : null));\n if (sz) css.push('font-size:' + Math.round((sz / 2) * (4 / 3)) + 'px');\n const font = rPr ? kid(rPr, 'rFonts') : null;\n const fontName = val(font, 'ascii') || val(font, 'cs');\n if (fontName) css.push(`font-family:'${fontName}'`);\n if (css.length) text = `<span style=\"${css.join(';')}\">${text}</span>`;\n if (flagOn(rPr, 'b')) text = `<strong>${text}</strong>`;\n if (flagOn(rPr, 'i')) text = `<em>${text}</em>`;\n if (flagOn(rPr, 'u') && val(kid(rPr!, 'u')) !== 'none') text = `<u>${text}</u>`;\n if (flagOn(rPr, 'strike')) text = `<s>${text}</s>`;\n const vert = val(rPr ? kid(rPr, 'vertAlign') : null);\n if (vert === 'superscript') text = `<sup>${text}</sup>`;\n else if (vert === 'subscript') text = `<sub>${text}</sub>`;\n return text;\n }\n\n private convertImage(holder: Element): string {\n // find any blip (DrawingML) or imagedata (VML) descendant regardless of depth\n let relId = '';\n let widthPx = 0;\n const walk = (el: Element) => {\n if (el.localName === 'blip') relId = relId || val(el, 'embed') || val(el, 'link');\n if (el.localName === 'imagedata') relId = relId || val(el, 'id');\n if (el.localName === 'extent') {\n const cx = parseFloat(el.getAttribute('cx') || '0');\n if (cx) widthPx = Math.round(cx / 9525); // EMU → px\n }\n for (const c of Array.from(el.children)) walk(c);\n };\n walk(holder);\n if (!relId) return '';\n const src = this.images.get(relId);\n if (!src) return '';\n const w = widthPx ? ` width=\"${widthPx}\"` : '';\n return `<img src=\"${src}\" alt=\"\"${w}>`;\n }\n\n private convertTable(tbl: Element): string {\n let html = '<table style=\"border-collapse:collapse;width:100%\"><tbody>';\n for (const tr of kids(tbl, 'tr')) {\n html += '<tr>';\n for (const tc of kids(tr, 'tc')) {\n const span = parseInt(val(kid(tc, 'tcPr', 'gridSpan')) || '1', 10) || 1;\n const spanAttr = span > 1 ? ` colspan=\"${span}\"` : '';\n let inner = '';\n for (const child of Array.from(tc.children)) {\n if (child.localName === 'p') inner += this.convertPara(child);\n else if (child.localName === 'tbl') inner += this.convertTable(child);\n }\n html += `<td style=\"border:1px solid #b9c2cc\"${spanAttr}>${inner || '<br>'}</td>`;\n }\n html += '</tr>';\n }\n return html + '</tbody></table>';\n }\n}\n\n/* ------------------------------------------------------------- entry point */\nexport async function importDocxToHtml(input: File | Blob | ArrayBuffer): Promise<string> {\n const buf = input instanceof ArrayBuffer ? input : await input.arrayBuffer();\n const entries = parseZip(buf);\n const decoder = new TextDecoder();\n const readXml = async (name: string): Promise<Document | null> => {\n const e = entries.get(name);\n if (!e) return null;\n return new DOMParser().parseFromString(decoder.decode(await readEntry(buf, e)), 'application/xml');\n };\n\n const doc = await readXml('word/document.xml');\n const body = doc?.getElementsByTagName('*');\n let bodyEl: Element | null = null;\n if (body) {\n for (const el of Array.from(body)) {\n if (el.localName === 'body') {\n bodyEl = el;\n break;\n }\n }\n }\n if (!bodyEl) throw new Error('word/document.xml missing or invalid');\n\n // relationships: id → target (hyperlinks are absolute, images relative to word/)\n const rels = new Map<string, string>();\n const imageTargets = new Map<string, string>();\n const relsDoc = await readXml('word/_rels/document.xml.rels');\n if (relsDoc) {\n for (const rel of Array.from(relsDoc.getElementsByTagName('*'))) {\n if (rel.localName !== 'Relationship') continue;\n const id = rel.getAttribute('Id') || '';\n const target = rel.getAttribute('Target') || '';\n const type = rel.getAttribute('Type') || '';\n if (/hyperlink/i.test(type)) rels.set(id, target);\n else if (/image/i.test(type)) imageTargets.set(id, target);\n }\n }\n\n // load referenced images as data URLs\n const images = new Map<string, string>();\n for (const [id, target] of imageTargets) {\n const path = target.startsWith('/') ? target.slice(1) : 'word/' + target.replace(/^\\.\\//, '');\n const entry = entries.get(path);\n if (!entry) continue;\n const ext = (path.split('.').pop() || '').toLowerCase();\n const mime = IMG_MIME[ext];\n if (!mime) continue; // skip unsupported formats like emf/wmf\n try {\n images.set(id, `data:${mime};base64,${toBase64(await readEntry(buf, entry))}`);\n } catch {\n /* skip broken image */\n }\n }\n\n // numbering: numId → ul/ol (from level-0 numFmt of the abstract definition)\n const numFmt = new Map<string, 'ul' | 'ol'>();\n const numDoc = await readXml('word/numbering.xml');\n if (numDoc) {\n const abstractFmt = new Map<string, 'ul' | 'ol'>();\n const all = Array.from(numDoc.getElementsByTagName('*'));\n for (const el of all) {\n if (el.localName !== 'abstractNum') continue;\n const id = val(el, 'abstractNumId');\n const lvl0 = kids(el, 'lvl').find((l) => val(l, 'ilvl') === '0') || kids(el, 'lvl')[0];\n const fmt = lvl0 ? val(kid(lvl0, 'numFmt')) : '';\n abstractFmt.set(id, fmt === 'bullet' ? 'ul' : 'ol');\n }\n for (const el of all) {\n if (el.localName !== 'num') continue;\n const numId = val(el, 'numId');\n const absId = val(kid(el, 'abstractNumId'));\n numFmt.set(numId, abstractFmt.get(absId) || 'ul');\n }\n }\n\n return new DocxConverter(rels, images, numFmt).convertBody(bodyEl);\n}\n","import { EditorInitOptions, EditorLanguage, FableEditorApi, MenuItemDef, DialogButton } from './types';\r\nimport { getStrings, I18nStrings } from './i18n';\r\nimport { FONTS, SIZES, BLOCKS, COLORS, QUICK_COLORS, CHAR_CATEGORIES, EMOJI_CATEGORIES, GlyphCategory, MIN_FONT_PX, MAX_FONT_PX, LINE_HEIGHTS, WORD_SPACINGS, LETTER_SPACINGS, CODE_LANGS, DEFAULT_TOOLBAR, DEFAULT_MENUBAR } from './config';\r\nimport { IC } from './icons';\r\nimport { cleanPastedHTML, normalizeTextPaste } from './paste-engine';\r\nimport { importDocxToHtml } from './docx-import';\r\n\r\ntype ImgCorner = 'nw' | 'ne' | 'sw' | 'se';\r\nconst IMG_CORNERS: ImgCorner[] = ['nw', 'ne', 'sw', 'se'];\r\n\r\ntype TplLayout = 'img-left' | 'img-right' | 'img-top' | 'img-center';\r\nconst TPL_LAYOUTS: TplLayout[] = ['img-left', 'img-right', 'img-top', 'img-center'];\r\nconst TPL_LABEL: Record<TplLayout, keyof I18nStrings> = {\r\n 'img-left': 'tplimgleft',\r\n 'img-right': 'tplimgright',\r\n 'img-top': 'tplimgtop',\r\n 'img-center': 'tplimgcenter'\r\n};\r\nconst TPL_ICON: Record<TplLayout, string> = {\r\n 'img-left': IC.tplleft,\r\n 'img-right': IC.tplright,\r\n 'img-top': IC.tpltop,\r\n 'img-center': IC.tplcenter\r\n};\r\n\r\n/* ---------------------------------------------------------- tooltips\r\n One shared bubble + one delegated document listener restyles every native\r\n `title` tooltip in the editor UI (toolbar, menus, popups, context toolbars,\r\n dialogs) without extra wrapper markup per control. Titles inside the\r\n editable area are user content and keep the browser default. */\r\nconst TIP_SCOPE = '.tox,.pop,.tblctx,.imgctx,.selctx,.dlg';\r\nlet tipEl: HTMLDivElement | null = null;\r\nlet tipTarget: HTMLElement | null = null;\r\nlet tipTimer = 0;\r\nlet tipsInstalled = false;\r\n\r\nfunction hideTip(): void {\r\n clearTimeout(tipTimer);\r\n tipTarget = null;\r\n if (tipEl) tipEl.classList.remove('show');\r\n}\r\n\r\nfunction showTip(el: HTMLElement): void {\r\n const text = el.dataset.tip;\r\n if (!text) return;\r\n tipTarget = el;\r\n clearTimeout(tipTimer);\r\n // moving along a toolbar re-anchors an already-visible tip almost instantly\r\n const delay = tipEl && tipEl.classList.contains('show') ? 60 : 350;\r\n tipTimer = window.setTimeout(() => {\r\n if (tipTarget !== el || !document.contains(el)) return;\r\n if (!tipEl) {\r\n tipEl = document.createElement('div');\r\n tipEl.className = 'etip';\r\n document.body.appendChild(tipEl);\r\n }\r\n tipEl.textContent = text;\r\n tipEl.classList.add('show');\r\n const r = el.getBoundingClientRect();\r\n const w = tipEl.offsetWidth;\r\n const h = tipEl.offsetHeight;\r\n let x = r.left + r.width / 2 - w / 2;\r\n x = Math.max(6, Math.min(x, innerWidth - w - 6));\r\n let y = r.bottom + 7;\r\n if (y + h > innerHeight - 6) y = r.top - h - 7;\r\n tipEl.style.left = x + 'px';\r\n tipEl.style.top = y + 'px';\r\n }, delay);\r\n}\r\n\r\nfunction installTooltips(): void {\r\n if (tipsInstalled) return;\r\n tipsInstalled = true;\r\n document.addEventListener('mouseover', (e) => {\r\n const raw = e.target as HTMLElement;\r\n const el = raw.closest ? (raw.closest('[title],[data-tip]') as HTMLElement | null) : null;\r\n if (!el || !el.closest(TIP_SCOPE) || el.closest('.earea')) {\r\n if (el !== tipTarget) hideTip();\r\n return;\r\n }\r\n const title = el.getAttribute('title');\r\n if (title) {\r\n // hand the text to the custom bubble and disarm the native one\r\n el.dataset.tip = title;\r\n el.removeAttribute('title');\r\n if (!el.getAttribute('aria-label')) el.setAttribute('aria-label', title);\r\n }\r\n if (el !== tipTarget) showTip(el);\r\n });\r\n document.addEventListener('mouseout', (e) => {\r\n if (tipTarget && !tipTarget.contains(e.relatedTarget as Node)) hideTip();\r\n });\r\n document.addEventListener('mousedown', hideTip, true);\r\n addEventListener('scroll', hideTip, true);\r\n}\r\n\r\nexport class FableEditor implements FableEditorApi {\r\n private static instanceCounter = 0;\r\n\r\n private options: Required<\r\n Omit<\r\n EditorInitOptions,\r\n | 'imageUploadHandler'\r\n | 'onImageUploadError'\r\n | 'contentStyle'\r\n | 'videoUploadHandler'\r\n | 'onVideoUploadError'\r\n | 'primaryColor'\r\n | 'toolbarGroupBackground'\r\n | 'uiFontFamily'\r\n >\r\n >;\r\n private lang: EditorLanguage = 'en';\r\n private contentClass = 'fable-content-' + FableEditor.instanceCounter++;\r\n private contentStyleEl: HTMLStyleElement | null = null;\r\n\r\n private shell!: HTMLElement;\r\n private menubar!: HTMLElement;\r\n private toolbar!: HTMLElement;\r\n private ed!: HTMLElement;\r\n private statusbar!: HTMLElement;\r\n private sbHelp!: HTMLElement;\r\n private sbWords!: HTMLElement;\r\n private imgInput!: HTMLInputElement;\r\n\r\n private savedRange: Range | null = null;\r\n private foreColor = '#000000';\r\n private backColor = '#FACC15';\r\n\r\n private openPop: HTMLElement | null = null;\r\n private openSubEl: HTMLElement | null = null;\r\n private popAnchor: HTMLElement | null = null;\r\n private dlgOvl: HTMLElement | null = null;\r\n\r\n private tblActive: HTMLTableElement | null = null;\r\n private tblCorner: HTMLElement | null = null;\r\n private tblColBars: HTMLElement[] = [];\r\n private tblCtx: HTMLElement | null = null;\r\n private tblCellMark: HTMLElement | null = null;\r\n private tblOpMark: HTMLElement | null = null;\r\n private tblOpMarkKind: 'row' | 'col' | null = null;\r\n\r\n private imgActive: HTMLImageElement | null = null;\r\n private imgHandles: HTMLElement[] = [];\r\n private imgCtx: HTMLElement | null = null;\r\n private imgHideTimer: number | null = null;\r\n\r\n private phActive: HTMLElement | null = null;\r\n private phCtx: HTMLElement | null = null;\r\n private phUploadTarget: HTMLElement | null = null;\r\n private imageUploadHandler?: (file: File) => Promise<string>;\r\n private onImageUploadError?: (error: unknown, file: File) => void;\r\n private contentStyle?: string;\r\n\r\n private vidInput!: HTMLInputElement;\r\n /* a <video> element or a .video-embed iframe wrapper — both share the\r\n same selection outline + align/delete context toolbar */\r\n private vidActive: HTMLElement | null = null;\r\n private vidCtx: HTMLElement | null = null;\r\n private vidHideTimer: number | null = null;\r\n private vphActive: HTMLElement | null = null;\r\n private vphCtx: HTMLElement | null = null;\r\n private vphUploadTarget: HTMLElement | null = null;\r\n private videoUploadHandler?: (file: File) => Promise<string>;\r\n private onVideoUploadError?: (error: unknown, file: File) => void;\r\n\r\n private selCtx: HTMLElement | null = null;\r\n\r\n private tbrMore: HTMLButtonElement | null = null;\r\n private tbrExpanded = false;\r\n\r\n private codeActive: HTMLElement | null = null;\r\n private codeCtx: HTMLElement | null = null;\r\n\r\n private tplActive: HTMLElement | null = null;\r\n private tplCtx: HTMLElement | null = null;\r\n\r\n private docInput!: HTMLInputElement;\r\n private revisions: Array<{ time: number; html: string }> = [];\r\n private revTimer: number | null = null;\r\n private draftTimer: number | null = null;\r\n private draftStorageKey = '';\r\n\r\n private listeners: Array<() => void> = [];\r\n private isDestroyed = false;\r\n\r\n constructor(options: EditorInitOptions) {\r\n this.options = {\r\n target: options.target,\r\n language: options.language || 'en',\r\n height: options.height ?? 302,\r\n initialContent: options.initialContent ?? '<p><br></p>',\r\n onChange: options.onChange || (() => { }),\r\n onReady: options.onReady || (() => { }),\r\n menubar: options.menubar ?? true,\r\n toolbar: options.toolbar ?? true,\r\n statusbar: options.statusbar ?? true,\r\n readonly: options.readonly ?? false,\r\n draftKey: options.draftKey ?? (typeof location !== 'undefined' ? location.pathname : 'default'),\r\n fontFamilyFormats: options.fontFamilyFormats ?? FONTS,\r\n imageFileTypes: options.imageFileTypes ?? ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp', 'image/webp'],\r\n videoFileTypes: options.videoFileTypes ?? ['video/mp4', 'video/webm', 'video/ogg']\r\n };\r\n this.imageUploadHandler = options.imageUploadHandler;\r\n this.onImageUploadError = options.onImageUploadError;\r\n this.videoUploadHandler = options.videoUploadHandler;\r\n this.onVideoUploadError = options.onVideoUploadError;\r\n this.contentStyle = options.contentStyle;\r\n this.applyTheme(options);\r\n this.lang = this.options.language;\r\n this.draftStorageKey = 'tmclone-draft:' + this.options.draftKey;\r\n this.initDOM();\r\n this.bindEvents();\r\n this.initUI();\r\n this.recordRevision();\r\n this.options.onReady(this);\r\n }\r\n\r\n private t(key: keyof I18nStrings): string {\r\n const s = getStrings(this.lang)[key];\r\n return typeof s === 'string' ? s : (s as string[]).join(',');\r\n }\r\n\r\n private tArr(key: keyof I18nStrings): string[] {\r\n return getStrings(this.lang)[key] as string[];\r\n }\r\n\r\n private dir(): 'ltr' | 'rtl' {\r\n return getStrings(this.lang).dir;\r\n }\r\n\r\n /* ---------------------------------------------------------- DOM setup */\r\n private initDOM(): void {\r\n const target = this.options.target;\r\n target.innerHTML = '';\r\n target.classList.add('tox-root');\r\n\r\n this.shell = document.createElement('div');\r\n this.shell.className = 'tox';\r\n\r\n this.menubar = document.createElement('div');\r\n this.menubar.className = 'mnb';\r\n\r\n this.toolbar = document.createElement('div');\r\n this.toolbar.className = 'tbr';\r\n\r\n this.ed = document.createElement('div');\r\n this.ed.className = 'earea ' + this.contentClass;\r\n this.ed.setAttribute('contenteditable', (!this.options.readonly).toString());\r\n this.ed.spellcheck = true;\r\n this.ed.innerHTML = this.options.initialContent;\r\n this.ed.style.height = this.options.height + 'px';\r\n\r\n this.statusbar = document.createElement('div');\r\n this.statusbar.className = 'sbar';\r\n this.statusbar.innerHTML = `\r\n <span class=\"mid\"></span>\r\n <span class=\"words\"></span>\r\n <span class=\"grip\">\r\n <svg viewBox=\"0 0 12 12\"><path d=\"M11 1 1 11M11 6 6 11M11 11h0\"/></svg>\r\n </span>\r\n `;\r\n this.sbHelp = this.statusbar.querySelector('.mid') as HTMLElement;\r\n this.sbWords = this.statusbar.querySelector('.words') as HTMLElement;\r\n const grip = this.statusbar.querySelector('.grip') as HTMLElement;\r\n this.bindGrip(grip);\r\n\r\n this.shell.appendChild(this.menubar);\r\n this.shell.appendChild(this.toolbar);\r\n this.shell.appendChild(this.ed);\r\n this.shell.appendChild(this.statusbar);\r\n if (this.contentStyle) {\r\n this.contentStyleEl = document.createElement('style');\r\n this.contentStyleEl.textContent = this.scopeContentStyle(this.contentStyle);\r\n this.shell.appendChild(this.contentStyleEl);\r\n }\r\n target.appendChild(this.shell);\r\n installTooltips();\r\n\r\n if (!this.options.statusbar) this.statusbar.style.display = 'none';\r\n\r\n this.imgInput = document.createElement('input');\r\n this.imgInput.type = 'file';\r\n this.imgInput.accept = this.options.imageFileTypes.join(',');\r\n this.imgInput.style.display = 'none';\r\n target.appendChild(this.imgInput);\r\n\r\n this.vidInput = document.createElement('input');\r\n this.vidInput.type = 'file';\r\n this.vidInput.accept = this.options.videoFileTypes.join(',');\r\n this.vidInput.style.display = 'none';\r\n target.appendChild(this.vidInput);\r\n\r\n this.docInput = document.createElement('input');\r\n this.docInput.type = 'file';\r\n this.docInput.accept = '.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document';\r\n this.docInput.style.display = 'none';\r\n target.appendChild(this.docInput);\r\n }\r\n\r\n /** Theme options land as CSS variables on the document root rather than the editor\r\n * shell, because dialogs, popups and floating context toolbars are appended to\r\n * document.body and would not inherit variables scoped to the shell. */\r\n private applyTheme(options: EditorInitOptions): void {\r\n const root = document.documentElement;\r\n if (options.primaryColor) root.style.setProperty('--fable-primary', options.primaryColor);\r\n if (options.toolbarGroupBackground) root.style.setProperty('--fable-tgrp-bg', options.toolbarGroupBackground);\r\n if (options.uiFontFamily) root.style.setProperty('--fable-ui-font', options.uiFontFamily);\r\n }\r\n\r\n /** Rewrites the literal word `body` in a user-supplied `contentStyle` string to a\r\n * selector scoped to this instance's content div. Everything else passes through\r\n * verbatim, since `.ed` is a plain div in the host page (not an iframe) and an\r\n * unscoped `body { ... }` rule would otherwise leak onto the host page's body. */\r\n private scopeContentStyle(css: string): string {\r\n return css.replace(/\\bbody\\b/g, '.' + this.contentClass);\r\n }\r\n\r\n private bindGrip(grip: HTMLElement): void {\r\n let startY = 0;\r\n let startH = 0;\r\n const md = (e: MouseEvent) => {\r\n startY = e.clientY;\r\n startH = this.ed.offsetHeight;\r\n e.preventDefault();\r\n const mv = (ev: MouseEvent) => {\r\n this.ed.style.height = Math.max(120, startH + ev.clientY - startY) + 'px';\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n };\r\n grip.addEventListener('mousedown', md);\r\n this.listeners.push(() => grip.removeEventListener('mousedown', md));\r\n }\r\n\r\n /* ---------------------------------------------------------- event binding */\r\n private bindEvents(): void {\r\n this.onDoc('mousedown', (e) => {\r\n if (\r\n this.openPop &&\r\n !this.openPop.contains(e.target as Node) &&\r\n !this.popAnchor!.contains(e.target as Node) &&\r\n !(this.openSubEl && this.openSubEl.contains(e.target as Node))\r\n ) {\r\n this.closePop();\r\n }\r\n });\r\n this.onDoc('keydown', (e) => {\r\n if (e.key === 'Escape') {\r\n this.closePop();\r\n this.closeDlg();\r\n }\r\n });\r\n this.onDoc('selectionchange', () => {\r\n const sel = window.getSelection();\r\n if (sel && this.ed.contains(sel.anchorNode)) {\r\n this.saveSel();\r\n this.refreshState();\r\n this.updateSelToolbar(sel);\r\n this.positionCellMarker();\r\n } else {\r\n this.clearSelToolbar();\r\n }\r\n });\r\n\r\n this.on(this.ed, 'input', () => {\r\n this.refreshState();\r\n this.onChange();\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n });\r\n this.on(this.ed, 'keydown', (e: KeyboardEvent) => {\r\n if (e.altKey && e.key === '0') {\r\n e.preventDefault();\r\n this.helpDlg();\r\n }\r\n if ((e.key === 'Delete' || e.key === 'Backspace') && this.phActive) {\r\n e.preventDefault();\r\n this.removeImgPlaceholder();\r\n }\r\n if ((e.key === 'Delete' || e.key === 'Backspace') && this.vphActive) {\r\n e.preventDefault();\r\n this.removeVphPlaceholder();\r\n }\r\n if (e.key === '`' && !e.ctrlKey && !e.metaKey && !e.altKey) this.tryCodeTyping(e);\r\n });\r\n this.on(this.ed, 'paste', (e: ClipboardEvent) => this.handlePaste(e));\r\n this.on(this.ed, 'drop', (e: DragEvent) => {\r\n /* content drops stay blocked (powerpaste_block_drop) — only an\r\n image/video file dropped onto its matching upload placeholder is consumed */\r\n e.preventDefault();\r\n const target = e.target as HTMLElement;\r\n const ph = target.closest?.('.img-ph:not(.vid-ph)') as HTMLElement | null;\r\n if (ph && this.ed.contains(ph) && !this.options.readonly) {\r\n const file = Array.from(e.dataTransfer?.files || []).find((f) => f.type.startsWith('image/'));\r\n if (file) this.readImageFileInto(file, ph);\r\n return;\r\n }\r\n const vph = target.closest?.('.vid-ph') as HTMLElement | null;\r\n if (vph && this.ed.contains(vph) && !this.options.readonly) {\r\n const file = Array.from(e.dataTransfer?.files || []).find((f) => f.type.startsWith('video/'));\r\n if (file) this.readVideoFileInto(file, vph);\r\n }\r\n });\r\n this.on(this.ed, 'dragover', (e: DragEvent) => e.preventDefault());\r\n this.on(this.ed, 'mousedown', (e: MouseEvent) => {\r\n const target = e.target as HTMLElement;\r\n const table = target.closest?.('table');\r\n if (table && this.ed.contains(table)) this.selectTableForResize(table as HTMLTableElement);\r\n else this.clearTableHandles();\r\n const ph = target.closest?.('.img-ph:not(.vid-ph)') as HTMLElement | null;\r\n if (ph && this.ed.contains(ph) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.ed.focus();\r\n this.selectImgPlaceholder(ph);\r\n } else {\r\n this.clearImgPlaceholderSel();\r\n }\r\n const vph = target.closest?.('.vid-ph') as HTMLElement | null;\r\n if (vph && this.ed.contains(vph) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.ed.focus();\r\n this.selectVphPlaceholder(vph);\r\n } else {\r\n this.clearVphPlaceholderSel();\r\n }\r\n const tpl = target.closest?.('.tpl') as HTMLElement | null;\r\n if (tpl && this.ed.contains(tpl) && !this.options.readonly) this.selectTemplate(tpl);\r\n else this.clearTplSel();\r\n const codeBlk = target.closest?.('pre.code-block') as HTMLElement | null;\r\n if (codeBlk && this.ed.contains(codeBlk) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.selectCodeEl(codeBlk);\r\n } else {\r\n this.clearCodeSel();\r\n }\r\n const img = target.closest?.('img') as HTMLImageElement | null;\r\n if (img && this.ed.contains(img) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.selectImage(img);\r\n } else {\r\n this.clearImageHandles();\r\n }\r\n const vid = target.closest?.('video, .video-embed') as HTMLElement | null;\r\n if (vid && this.ed.contains(vid) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.selectVideo(vid);\r\n } else {\r\n this.clearVidHandles();\r\n }\r\n });\r\n this.on(this.ed, 'mouseover', (e: MouseEvent) => {\r\n if (this.options.readonly) return;\r\n const img = (e.target as HTMLElement).closest?.('img') as HTMLImageElement | null;\r\n if (img && this.ed.contains(img)) {\r\n this.cancelImgHide();\r\n this.selectImage(img);\r\n }\r\n });\r\n this.on(this.ed, 'mouseout', (e: MouseEvent) => {\r\n const img = (e.target as HTMLElement).closest?.('img');\r\n if (!img) return;\r\n const to = e.relatedTarget as Node | null;\r\n if (\r\n to &&\r\n (this.imgCtx?.contains(to) ||\r\n this.imgHandles.some((h) => h.contains(to)) ||\r\n (to as HTMLElement).closest?.('img') === img)\r\n )\r\n return;\r\n this.scheduleImgHide();\r\n });\r\n this.on(this.ed, 'scroll', () => {\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n });\r\n this.onWin(\r\n 'scroll',\r\n () => {\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n this.repositionSelToolbar();\r\n },\r\n true\r\n );\r\n this.onWin('resize', () => {\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n this.repositionSelToolbar();\r\n this.updateToolbarOverflow();\r\n });\r\n /* container-driven, not just viewport-driven: an editor inside a resizable\r\n panel collapses/expands its toolbar as its own width changes */\r\n if (typeof ResizeObserver !== 'undefined') {\r\n const ro = new ResizeObserver(() => this.updateToolbarOverflow());\r\n ro.observe(this.shell);\r\n this.listeners.push(() => ro.disconnect());\r\n }\r\n\r\n this.on(this.imgInput, 'change', () => {\r\n const file = this.imgInput.files?.[0];\r\n if (!file) return;\r\n const ph = this.phUploadTarget;\r\n this.phUploadTarget = null;\r\n if (ph && this.ed.contains(ph)) {\r\n this.readImageFileInto(file, ph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n this.restoreSel();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<img src=\"${fr.result}\" title=\"${file.name.replace(/\"/g, '')}\" alt=\"\">`\r\n );\r\n this.onChange();\r\n };\r\n fr.readAsDataURL(file);\r\n });\r\n\r\n this.on(this.vidInput, 'change', () => {\r\n const file = this.vidInput.files?.[0];\r\n if (!file) return;\r\n const vph = this.vphUploadTarget;\r\n this.vphUploadTarget = null;\r\n if (vph && this.ed.contains(vph)) {\r\n this.readVideoFileInto(file, vph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n this.restoreSel();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<video controls src=\"${fr.result}\" title=\"${file.name.replace(/\"/g, '')}\"></video>`\r\n );\r\n this.onChange();\r\n };\r\n fr.readAsDataURL(file);\r\n });\r\n\r\n this.on(this.docInput, 'change', () => {\r\n const file = this.docInput.files?.[0];\r\n if (!file) return;\r\n this.importWordFile(file).catch(() => alert(this.t('importfail')));\r\n });\r\n\r\n this.onDoc('mousedown', (e) => {\r\n if (\r\n this.ed.contains(e.target as Node) ||\r\n e.target === this.tblCorner ||\r\n this.tblColBars.includes(e.target as HTMLElement) ||\r\n (this.tblCtx && this.tblCtx.contains(e.target as Node)) ||\r\n this.imgHandles.includes(e.target as HTMLElement) ||\r\n (this.imgCtx && this.imgCtx.contains(e.target as Node)) ||\r\n (this.phCtx && this.phCtx.contains(e.target as Node)) ||\r\n (this.tplCtx && this.tplCtx.contains(e.target as Node)) ||\r\n (this.selCtx && this.selCtx.contains(e.target as Node)) ||\r\n (this.vphCtx && this.vphCtx.contains(e.target as Node)) ||\r\n (this.vidCtx && this.vidCtx.contains(e.target as Node)) ||\r\n (this.codeCtx && this.codeCtx.contains(e.target as Node)) ||\r\n (this.openPop && this.openPop.contains(e.target as Node)) ||\r\n (this.openSubEl && this.openSubEl.contains(e.target as Node))\r\n )\r\n return;\r\n this.clearTableHandles();\r\n this.clearImageHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearTplSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.clearSelToolbar();\r\n });\r\n }\r\n\r\n private on<K extends keyof HTMLElementEventMap>(\r\n target: EventTarget,\r\n event: K,\r\n handler: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any\r\n ): void {\r\n target.addEventListener(event, handler as EventListener);\r\n this.listeners.push(() => target.removeEventListener(event, handler as EventListener));\r\n }\r\n\r\n private onDoc<K extends keyof DocumentEventMap>(event: K, handler: (this: Document, ev: DocumentEventMap[K]) => any): void {\r\n document.addEventListener(event, handler as EventListener);\r\n this.listeners.push(() => document.removeEventListener(event, handler as EventListener));\r\n }\r\n\r\n private onWin<K extends keyof WindowEventMap>(\r\n event: K,\r\n handler: (this: Window, ev: WindowEventMap[K]) => any,\r\n capture?: boolean\r\n ): void {\r\n window.addEventListener(event, handler as EventListener, capture);\r\n this.listeners.push(() => window.removeEventListener(event, handler as EventListener, capture));\r\n }\r\n\r\n /* ---------------------------------------------------------- public API */\r\n getContent(): string {\r\n return this.ed.innerHTML;\r\n }\r\n\r\n setContent(html: string): void {\r\n this.ed.innerHTML = html || '<p><br></p>';\r\n this.refreshState();\r\n this.clearTableHandles();\r\n this.clearImageHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearTplSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.clearSelToolbar();\r\n this.onChange();\r\n }\r\n\r\n insertContent(html: string): void {\r\n this.restoreSel();\r\n document.execCommand('insertHTML', false, html);\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n setLanguage(lang: EditorLanguage): void {\r\n this.lang = lang;\r\n this.initUI();\r\n }\r\n\r\n focus(): void {\r\n this.ed.focus();\r\n }\r\n\r\n async importWordFile(file: File | Blob): Promise<void> {\r\n const html = await importDocxToHtml(file);\r\n this.recordRevision();\r\n this.setContent(html);\r\n this.recordRevision();\r\n }\r\n\r\n restoreDraft(): boolean {\r\n let raw: string | null = null;\r\n try {\r\n raw = localStorage.getItem(this.draftStorageKey);\r\n } catch {\r\n /* storage unavailable */\r\n }\r\n if (!raw) return false;\r\n try {\r\n const draft = JSON.parse(raw) as { time: number; html: string };\r\n if (!draft.html) return false;\r\n this.recordRevision();\r\n this.setContent(draft.html);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n getRevisions(): Array<{ time: number; html: string }> {\r\n return this.revisions.slice();\r\n }\r\n\r\n destroy(): void {\r\n if (this.isDestroyed) return;\r\n this.isDestroyed = true;\r\n if (this.revTimer != null) window.clearTimeout(this.revTimer);\r\n if (this.draftTimer != null) window.clearTimeout(this.draftTimer);\r\n this.closePop();\r\n this.closeDlg();\r\n this.clearTableHandles();\r\n this.clearImageHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearTplSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.clearSelToolbar();\r\n this.listeners.forEach((fn) => fn());\r\n this.listeners = [];\r\n if (this.shell && this.shell.parentNode) this.shell.parentNode.removeChild(this.shell);\r\n if (this.imgInput && this.imgInput.parentNode) this.imgInput.parentNode.removeChild(this.imgInput);\r\n if (this.vidInput && this.vidInput.parentNode) this.vidInput.parentNode.removeChild(this.vidInput);\r\n if (this.docInput && this.docInput.parentNode) this.docInput.parentNode.removeChild(this.docInput);\r\n this.contentStyleEl = null;\r\n }\r\n\r\n /* ---------------------------------------------------------- selection */\r\n private saveSel(): void {\r\n const s = window.getSelection();\r\n if (s && s.rangeCount && this.ed.contains(s.anchorNode)) this.savedRange = s.getRangeAt(0).cloneRange();\r\n }\r\n\r\n private restoreSel(): void {\r\n if (!this.savedRange) {\r\n this.ed.focus();\r\n return;\r\n }\r\n this.ed.focus();\r\n const s = window.getSelection();\r\n if (!s) return;\r\n s.removeAllRanges();\r\n s.addRange(this.savedRange);\r\n }\r\n\r\n private exec(cmd: string, val?: string): void {\r\n this.restoreSel();\r\n document.execCommand('styleWithCSS', false, cmd !== 'fontSize' ? 'true' : 'false');\r\n document.execCommand(cmd, false, val ?? (undefined as any));\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private closestBlock(node: Node | null): HTMLElement | null {\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && /^(P|DIV|H[1-6]|LI|PRE|BLOCKQUOTE|TD|TH)$/i.test((node as HTMLElement).tagName)) {\r\n return node as HTMLElement;\r\n }\r\n node = (node as ChildNode).parentNode;\r\n }\r\n return null;\r\n }\r\n\r\n private selectedBlocks(): HTMLElement[] {\r\n const s = window.getSelection();\r\n if (!s || !s.rangeCount || !this.ed.contains(s.anchorNode)) return [];\r\n const r = s.getRangeAt(0);\r\n const blocks = Array.from(this.ed.querySelectorAll('p,h1,h2,h3,h4,h5,h6,li,pre,blockquote,td,th')).filter((b) =>\r\n r.intersectsNode(b)\r\n );\r\n if (!blocks.length) {\r\n const b = this.closestBlock(s.anchorNode);\r\n if (b) return [b];\r\n }\r\n return blocks as HTMLElement[];\r\n }\r\n\r\n private onChange(): void {\r\n this.options.onChange(this.ed.innerHTML);\r\n this.scheduleRevision();\r\n this.scheduleDraftSave();\r\n }\r\n\r\n /* ---------------------------------------------------------- revisions / drafts */\r\n private recordRevision(): void {\r\n const html = this.ed.innerHTML;\r\n const last = this.revisions[this.revisions.length - 1];\r\n if (last && last.html === html) return;\r\n this.revisions.push({ time: Date.now(), html });\r\n if (this.revisions.length > 30) this.revisions.shift();\r\n }\r\n\r\n private scheduleRevision(): void {\r\n if (this.revTimer != null) window.clearTimeout(this.revTimer);\r\n this.revTimer = window.setTimeout(() => {\r\n this.revTimer = null;\r\n this.recordRevision();\r\n }, 1500);\r\n }\r\n\r\n private scheduleDraftSave(): void {\r\n if (this.draftTimer != null) window.clearTimeout(this.draftTimer);\r\n this.draftTimer = window.setTimeout(() => {\r\n this.draftTimer = null;\r\n try {\r\n localStorage.setItem(this.draftStorageKey, JSON.stringify({ time: Date.now(), html: this.ed.innerHTML }));\r\n } catch {\r\n /* storage unavailable or full */\r\n }\r\n }, 800);\r\n }\r\n\r\n private revisionDlg(): void {\r\n this.recordRevision();\r\n this.dialog(this.t('revhistory'), (body) => {\r\n if (!this.revisions.length) {\r\n body.innerHTML = `<p style=\"color:#556\">${this.t('revempty')}</p>`;\r\n return;\r\n }\r\n const wrap = document.createElement('div');\r\n wrap.className = 'revwrap';\r\n const list = document.createElement('div');\r\n list.className = 'revlist';\r\n const prev = document.createElement('div');\r\n prev.className = 'revprev';\r\n const restoreBtn = document.createElement('button');\r\n restoreBtn.type = 'button';\r\n restoreBtn.className = 'revrestore';\r\n restoreBtn.textContent = this.t('restore');\r\n let selected = this.revisions.length - 1;\r\n const fmt = new Intl.DateTimeFormat(this.lang === 'ar' ? 'ar-AE' : 'en-GB', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit'\r\n });\r\n const items: Record<number, HTMLButtonElement> = {};\r\n const show = (i: number) => {\r\n selected = i;\r\n this.revisions.forEach((_, j) => items[j]?.classList.toggle('on', j === i));\r\n prev.innerHTML = this.revisions[i].html;\r\n restoreBtn.disabled = i === this.revisions.length - 1;\r\n };\r\n for (let i = this.revisions.length - 1; i >= 0; i--) {\r\n const rev = this.revisions[i];\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n const words = (new DOMParser().parseFromString(rev.html, 'text/html').body.textContent || '').trim();\r\n const wc = words ? words.split(/\\s+/).length : 0;\r\n const isCurrent = i === this.revisions.length - 1;\r\n b.innerHTML = `<span>${isCurrent ? this.t('currentver') : fmt.format(new Date(rev.time))}</span><span class=\"wc\">${wc} ${this.t('words')}</span>`;\r\n b.addEventListener('click', () => show(i));\r\n items[i] = b;\r\n list.appendChild(b);\r\n }\r\n list.append(restoreBtn);\r\n restoreBtn.addEventListener('click', () => {\r\n const rev = this.revisions[selected];\r\n if (!rev) return;\r\n this.recordRevision();\r\n this.setContent(rev.html);\r\n this.recordRevision();\r\n this.closeDlg();\r\n });\r\n wrap.append(list, prev);\r\n body.appendChild(wrap);\r\n show(selected);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- popups / menus */\r\n private closeSub(): void {\r\n this.openSubEl?.remove();\r\n this.openSubEl = null;\r\n }\r\n\r\n private closePop(): void {\r\n this.closeSub();\r\n if (this.openPop) {\r\n this.openPop.remove();\r\n this.openPop = null;\r\n this.popAnchor?.classList.remove('open');\r\n this.popAnchor = null;\r\n /* a menu item's mouseleave never fires once the menu is removed,\r\n so drop any row/column highlight it left behind */\r\n this.setOpTarget(null);\r\n }\r\n }\r\n\r\n private openSubFor(item: MenuItemDef, anchor: HTMLElement): void {\r\n this.closeSub();\r\n const sub = document.createElement('div');\r\n sub.className = 'pop sub';\r\n sub.dir = this.dir();\r\n if (item.subBuild) item.subBuild(sub);\r\n else if (item.sub) this.menuItems(sub, item.sub);\r\n sub.addEventListener('mousedown', (e) => {\r\n if ((e.target as HTMLElement).tagName !== 'INPUT') e.preventDefault();\r\n });\r\n document.body.appendChild(sub);\r\n const r = anchor.getBoundingClientRect();\r\n const isRtl = this.dir() === 'rtl';\r\n // overlap the parent item slightly so the pointer can travel into the flyout\r\n let x = isRtl ? r.left - sub.offsetWidth + 2 : r.right - 2;\r\n x = Math.max(8, Math.min(x + scrollX, scrollX + innerWidth - sub.offsetWidth - 8));\r\n let y = r.top + scrollY - 6;\r\n y = Math.max(8 + scrollY, Math.min(y, scrollY + innerHeight - sub.offsetHeight - 8));\r\n sub.style.left = x + 'px';\r\n sub.style.top = y + 'px';\r\n this.openSubEl = sub;\r\n }\r\n\r\n private popup(anchor: HTMLElement, build: (el: HTMLElement) => void, cls?: string): void {\r\n if (this.openPop && this.popAnchor === anchor) {\r\n this.closePop();\r\n return;\r\n }\r\n this.closePop();\r\n const el = document.createElement('div');\r\n el.className = 'pop' + (cls ? ' ' + cls : '');\r\n el.dir = this.dir();\r\n build(el);\r\n document.body.appendChild(el);\r\n const r = anchor.getBoundingClientRect();\r\n // align the menu with its control: at least as wide as the anchor\r\n el.style.minWidth = Math.max(160, Math.round(r.width)) + 'px';\r\n el.style.top = r.bottom + scrollY + 2 + 'px';\r\n const isRtl = this.dir() === 'rtl';\r\n let x = isRtl ? r.right - el.offsetWidth : r.left;\r\n x = Math.max(8, Math.min(x + scrollX, scrollX + innerWidth - el.offsetWidth - 8));\r\n el.style.left = x + 'px';\r\n el.addEventListener('mousedown', (e) => {\r\n if ((e.target as HTMLElement).tagName !== 'INPUT') e.preventDefault();\r\n });\r\n this.openPop = el;\r\n this.popAnchor = anchor;\r\n anchor.classList.add('open');\r\n }\r\n\r\n private menuItems(el: HTMLElement, items: (MenuItemDef | '|')[]): void {\r\n items.forEach((it) => {\r\n if (it === '|') {\r\n el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\r\n return;\r\n }\r\n const hasSub = !!(it.sub || it.subBuild);\r\n const b = document.createElement('button');\r\n b.className = 'mi' + (it.on ? ' on' : '');\r\n b.innerHTML = `<span class=\"ic\">${it.icon || ''}</span><span class=\"prev\" ${it.previewStyle ? `style=\"${it.previewStyle}\"` : ''\r\n }>${it.label}</span>${it.shortcut ? `<span class=\"sc\">${it.shortcut}</span>` : ''}${hasSub ? `<span class=\"subarrow\">${IC.chev}</span>` : ''\r\n }`;\r\n b.addEventListener('click', () => {\r\n if (!it.action) return;\r\n this.closePop();\r\n it.action();\r\n });\r\n b.addEventListener('mouseenter', () => {\r\n if (hasSub) this.openSubFor(it, b);\r\n else if (this.openSubEl && el !== this.openSubEl) this.closeSub();\r\n it.hover?.(true);\r\n });\r\n b.addEventListener('mouseleave', () => it.hover?.(false));\r\n el.appendChild(b);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- toolbar builders */\r\n private tbtn(icon: string, tip: string, fn: (e?: Event) => void, id?: string): HTMLButtonElement {\r\n const b = document.createElement('button');\r\n b.className = 'tbtn';\r\n b.type = 'button';\r\n b.title = tip;\r\n b.innerHTML = icon;\r\n if (id) b.dataset.id = id;\r\n b.addEventListener('mousedown', (e) => e.preventDefault());\r\n b.addEventListener('click', fn as EventListener);\r\n return b;\r\n }\r\n\r\n /** Font-size increase / decrease step button. */\r\n private stepBtn(delta: number): HTMLButtonElement {\r\n const sign = delta > 0 ? '+' : '−';\r\n const icon = delta > 0 ? IC.fontsizeup : IC.fontsizedown;\r\n const b = this.tbtn(icon, this.t('fontsize') + ' ' + sign, () => this.stepFontSize(delta));\r\n b.addEventListener('mousedown', () => this.saveSel());\r\n return b;\r\n }\r\n\r\n /** Toolbar icon button that opens a popup menu anchored to itself. */\r\n private menuTbtn(icon: string, tip: string, menuFn: (b: HTMLButtonElement) => void, id?: string): HTMLButtonElement {\r\n const b = this.tbtn(icon, tip, () => menuFn(b), id);\r\n b.classList.add('hasmenu');\r\n b.insertAdjacentHTML('beforeend', IC.chev);\r\n b.addEventListener('mousedown', () => this.saveSel());\r\n return b;\r\n }\r\n\r\n /** Quick text-color chips plus a \"more\" chip that opens the full palette. */\r\n private colorChips(): HTMLElement[] {\r\n const chip = (title: string): HTMLButtonElement => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.className = 'cchip';\r\n b.title = title;\r\n b.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n this.saveSel();\r\n });\r\n return b;\r\n };\r\n const chips = QUICK_COLORS.map((c) => {\r\n const b = chip(this.t('forecolor'));\r\n b.style.background = c;\r\n b.addEventListener('click', () => this.applyColor('fore', c));\r\n return b;\r\n });\r\n const more = chip(this.t('forecolor'));\r\n more.classList.add('more');\r\n more.dataset.cb = 'fore';\r\n more.innerHTML = IC.chev;\r\n more.addEventListener('click', () => this.colorMenu(more, 'fore'));\r\n return [...chips, more];\r\n }\r\n\r\n private group(...els: HTMLElement[]): HTMLElement {\r\n const g = document.createElement('div');\r\n g.className = 'tgrp';\r\n els.forEach((e) => {\r\n e.classList.add('gbtn');\r\n g.appendChild(e);\r\n });\r\n return g;\r\n }\r\n\r\n private tsel(cls: string, id: string, defLabel: string, menuFn: (b: HTMLButtonElement) => void): HTMLButtonElement {\r\n const b = document.createElement('button');\r\n b.className = 'tsel ' + cls;\r\n b.type = 'button';\r\n b.dataset.id = id;\r\n b.innerHTML = `<span class=\"lbl empty\">${defLabel || ''}</span>${IC.chev}`;\r\n b.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n this.saveSel();\r\n });\r\n b.addEventListener('click', () => menuFn(b));\r\n return b;\r\n }\r\n\r\n private setListStyle(kind: 'ol' | 'ul', style: string): void {\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s) return;\r\n let list = this.closestBlock(s.anchorNode)?.closest(kind);\r\n if (!list) {\r\n this.exec(kind === 'ol' ? 'insertOrderedList' : 'insertUnorderedList');\r\n list = this.closestBlock(s.anchorNode)?.closest(kind);\r\n }\r\n if (list) (list as HTMLElement).style.listStyleType = style;\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private listMenu(anchor: HTMLButtonElement, kind: 'ul' | 'ol'): void {\r\n const cmd = kind === 'ol' ? 'insertOrderedList' : 'insertUnorderedList';\r\n // the toggle item creates the default style, so it is not repeated below\r\n const styles: [string, string][] =\r\n kind === 'ol'\r\n ? [\r\n ['lower-alpha', IC.ol_alpha],\r\n ['lower-roman', IC.ol_roman],\r\n ['upper-alpha', IC.ol_alphau],\r\n ['upper-roman', IC.ol_romanu]\r\n ]\r\n : [\r\n ['circle', IC.ul_circle],\r\n ['square', IC.ul_square]\r\n ];\r\n const labels = this.tArr(kind === 'ol' ? 'liststyles_ol' : 'liststyles_ul').slice(1);\r\n const sel = window.getSelection();\r\n const listEl = sel ? (this.closestBlock(sel.anchorNode)?.closest(kind) as HTMLElement | null) : null;\r\n const curStyle = listEl ? listEl.style.listStyleType : '';\r\n this.popup(anchor, (el) => {\r\n this.menuItems(el, [\r\n {\r\n label: this.t(kind === 'ol' ? 'numlist' : 'bullist'),\r\n icon: kind === 'ol' ? IC.numlist : IC.bullist,\r\n on: document.queryCommandState(cmd),\r\n action: () => this.exec(cmd)\r\n }\r\n ]);\r\n el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\r\n const grid = document.createElement('div');\r\n grid.className = 'mi-grid';\r\n styles.forEach(([s, icon], i) => {\r\n const b = document.createElement('button');\r\n b.className = 'mi' + (curStyle === s ? ' on' : '');\r\n b.innerHTML = `<span class=\"ic\">${icon}</span><span class=\"prev\">${labels[i]}</span>`;\r\n b.addEventListener('click', () => {\r\n this.closePop();\r\n this.setListStyle(kind, s);\r\n });\r\n grid.appendChild(b);\r\n });\r\n el.appendChild(grid);\r\n });\r\n }\r\n\r\n /** Shared color-picker popup body — swatch grid plus the current-color /\r\n * no-color / custom-picker footer — so the fore/back toolbar menus and the\r\n * table cell-background menu all show the identical popup. */\r\n private buildPaletteInto(el: HTMLElement, curColor: string, apply: (c: string | null) => void): void {\r\n const grid = document.createElement('div');\r\n grid.className = 'cpal';\r\n COLORS.forEach((c) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.style.background = c;\r\n b.title = c;\r\n b.addEventListener('click', () => {\r\n this.closePop();\r\n apply(c);\r\n });\r\n grid.appendChild(b);\r\n });\r\n el.appendChild(grid);\r\n el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\r\n const foot = document.createElement('div');\r\n foot.className = 'cfoot';\r\n const hex = /^#[0-9a-f]{6}$/i.test(curColor) ? curColor : '#000000';\r\n const cur = document.createElement('div');\r\n cur.className = 'cswatch cur';\r\n cur.title = this.t('currentcolor');\r\n cur.style.background = hex;\r\n cur.innerHTML = IC.check;\r\n const nocolor = document.createElement('button');\r\n nocolor.type = 'button';\r\n nocolor.className = 'cswatch nocolor';\r\n nocolor.title = this.t('removecolor');\r\n nocolor.addEventListener('click', () => {\r\n this.closePop();\r\n apply(null);\r\n });\r\n const wheel = document.createElement('label');\r\n wheel.className = 'cswatch cwheel';\r\n wheel.title = this.t('customcolor');\r\n wheel.innerHTML = IC.palette;\r\n const picker = document.createElement('input');\r\n picker.type = 'color';\r\n picker.value = hex;\r\n picker.addEventListener('change', () => {\r\n this.closePop();\r\n apply(picker.value);\r\n });\r\n wheel.appendChild(picker);\r\n foot.append(cur, nocolor, wheel);\r\n el.appendChild(foot);\r\n }\r\n\r\n private colorMenu(anchor: HTMLButtonElement, kind: 'fore' | 'back'): void {\r\n this.popup(\r\n anchor,\r\n (el) => {\r\n const curColor = kind === 'fore' ? this.foreColor : this.backColor;\r\n this.buildPaletteInto(el, curColor, (c) => this.applyColor(kind, c));\r\n },\r\n kind === 'fore' ? 'pop-forecolor' : 'pop-backcolor'\r\n );\r\n }\r\n\r\n private applyColor(kind: 'fore' | 'back', c: string | null): void {\r\n if (kind === 'fore') {\r\n this.foreColor = c || '#000000';\r\n this.exec('foreColor', c || '#000000');\r\n } else {\r\n this.backColor = c || 'transparent';\r\n this.exec('hiliteColor', c || 'transparent');\r\n }\r\n this.syncColorSwatches(this.toolbar);\r\n if (this.selCtx) this.syncColorSwatches(this.selCtx);\r\n }\r\n\r\n private syncColorSwatches(container: HTMLElement): void {\r\n container.querySelectorAll(`[data-cb=fore]`).forEach((el) => ((el as HTMLElement).style.background = this.foreColor));\r\n container.querySelectorAll(`[data-cb=back]`).forEach((el) => ((el as HTMLElement).style.background = this.backColor));\r\n }\r\n\r\n private fontItems(): MenuItemDef[] {\r\n return this.options.fontFamilyFormats.map(([name, val]) => ({\r\n label: name,\r\n previewStyle: `font-family:${val}`,\r\n on: this.currentFont() === name,\r\n action: () => this.exec('fontName', val)\r\n }));\r\n }\r\n\r\n private fontMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.fontItems()));\r\n }\r\n\r\n private sizeItems(): MenuItemDef[] {\r\n return SIZES.map((s) => ({\r\n label: s,\r\n on: this.currentSize() === s,\r\n action: () => this.applyFontSize(s)\r\n }));\r\n }\r\n\r\n private sizeMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.sizeItems()));\r\n }\r\n\r\n /** Font sizing needs a non-collapsed range. With a bare caret, grow the\r\n selection to the word under it; in an empty spot, select a zero-width\r\n space so the new size applies to what gets typed next. */\r\n private ensureSizeTarget(): void {\r\n const s = window.getSelection();\r\n if (!s) return;\r\n if (!s.rangeCount) {\r\n const r = document.createRange();\r\n r.selectNodeContents(this.ed);\r\n r.collapse(true);\r\n s.addRange(r);\r\n }\r\n if (!s.isCollapsed) return;\r\n const r = s.getRangeAt(0);\r\n const node = r.startContainer;\r\n if (node.nodeType === 3) {\r\n const text = (node as Text).data;\r\n let a = r.startOffset;\r\n let b = r.startOffset;\r\n while (a > 0 && /\\S/.test(text[a - 1])) a--;\r\n while (b < text.length && /\\S/.test(text[b])) b++;\r\n if (b > a) {\r\n const nr = document.createRange();\r\n nr.setStart(node, a);\r\n nr.setEnd(node, b);\r\n s.removeAllRanges();\r\n s.addRange(nr);\r\n this.savedRange = nr.cloneRange();\r\n return;\r\n }\r\n }\r\n const zw = document.createTextNode(String.fromCharCode(0x200b));\r\n r.insertNode(zw);\r\n const nr = document.createRange();\r\n nr.setStart(zw, 0);\r\n nr.setEnd(zw, 1);\r\n s.removeAllRanges();\r\n s.addRange(nr);\r\n this.savedRange = nr.cloneRange();\r\n }\r\n\r\n private applyFontSize(px: string): void {\r\n this.restoreSel();\r\n this.ensureSizeTarget();\r\n document.execCommand('styleWithCSS', false, 'false');\r\n document.execCommand('fontSize', false, '7');\r\n const spans: HTMLSpanElement[] = [];\r\n this.ed.querySelectorAll('font[size=\"7\"]').forEach((f) => {\r\n const span = document.createElement('span');\r\n span.style.fontSize = px;\r\n while (f.firstChild) span.appendChild(f.firstChild);\r\n f.replaceWith(span);\r\n spans.push(span);\r\n });\r\n if (spans.length) {\r\n // keep the selection anchored inside the new spans so the current\r\n // size reads back correctly (e.g. for repeated +/- stepping)\r\n const r = document.createRange();\r\n r.setStart(spans[0], 0);\r\n r.setEnd(spans[spans.length - 1], spans[spans.length - 1].childNodes.length);\r\n const s = window.getSelection();\r\n if (s) {\r\n s.removeAllRanges();\r\n s.addRange(r);\r\n }\r\n }\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private stepFontSize(delta: number): void {\r\n const cur = parseInt(this.currentSize(), 10) || 14;\r\n const next = Math.min(MAX_FONT_PX, Math.max(MIN_FONT_PX, cur + delta));\r\n if (next === cur) return;\r\n this.applyFontSize(next + 'px');\r\n }\r\n\r\n /* ------------------------------------------------ case / spacing / link */\r\n private transformCase(kind: 'lower' | 'upper' | 'capitalize'): void {\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s || !s.rangeCount || s.isCollapsed) return;\r\n const range = s.getRangeAt(0);\r\n const walker = document.createTreeWalker(this.ed, NodeFilter.SHOW_TEXT);\r\n const nodes: Text[] = [];\r\n let n: Node | null;\r\n while ((n = walker.nextNode())) if (range.intersectsNode(n)) nodes.push(n as Text);\r\n nodes.forEach((t) => {\r\n const start = t === range.startContainer ? range.startOffset : 0;\r\n const end = t === range.endContainer ? range.endOffset : t.data.length;\r\n if (end <= start) return;\r\n const mid = t.data.slice(start, end);\r\n let out = mid;\r\n if (kind === 'lower') out = mid.toLowerCase();\r\n else if (kind === 'upper') out = mid.toUpperCase();\r\n else out = mid.replace(/(^|\\s)(\\S)/g, (m, sp, ch) => sp + ch.toUpperCase());\r\n t.replaceData(start, end - start, out);\r\n });\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private caseItems(): MenuItemDef[] {\r\n return [\r\n { label: this.t('lowercase'), icon: IC.lowercaseic, action: () => this.transformCase('lower') },\r\n { label: this.t('uppercase'), icon: IC.uppercaseic, action: () => this.transformCase('upper') },\r\n { label: this.t('capitalize'), icon: IC.capitalizeic, action: () => this.transformCase('capitalize') }\r\n ];\r\n }\r\n\r\n private caseMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.caseItems()));\r\n }\r\n\r\n private applyBlockStyle(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing', value: string): void {\r\n this.restoreSel();\r\n const blocks = this.selectedBlocks();\r\n const cssProp = prop === 'lineHeight' ? 'line-height' : prop === 'wordSpacing' ? 'word-spacing' : 'letter-spacing';\r\n blocks.forEach((b) => {\r\n if (value) b.style[prop] = value;\r\n else b.style.removeProperty(cssProp);\r\n });\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private currentBlockStyle(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing'): string {\r\n const s = window.getSelection();\r\n const b = s ? this.closestBlock(s.anchorNode) : null;\r\n return b ? b.style[prop] || '' : '';\r\n }\r\n\r\n private blockStyleItems(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing', values: string[]): MenuItemDef[] {\r\n const cur = this.currentBlockStyle(prop);\r\n return [\r\n { label: this.t('normal'), on: !cur, action: () => this.applyBlockStyle(prop, '') },\r\n ...values.map((v) => ({\r\n label: v,\r\n on: cur === v,\r\n action: () => this.applyBlockStyle(prop, v)\r\n }))\r\n ];\r\n }\r\n\r\n private lineHeightMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('lineHeight', LINE_HEIGHTS)));\r\n }\r\n\r\n private wordSpacingMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('wordSpacing', WORD_SPACINGS)));\r\n }\r\n\r\n private letterSpacingMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('letterSpacing', LETTER_SPACINGS)));\r\n }\r\n\r\n private closestAnchor(): HTMLAnchorElement | null {\r\n const s = window.getSelection();\r\n let node: Node | null = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && (node as HTMLElement).tagName === 'A') return node as HTMLAnchorElement;\r\n node = node.parentNode;\r\n }\r\n return null;\r\n }\r\n\r\n private linkDlg(): void {\r\n this.saveSel();\r\n const anchorEl = this.closestAnchor();\r\n let urlIn: HTMLInputElement;\r\n const buttons: DialogButton[] = [];\r\n if (anchorEl) {\r\n buttons.push({\r\n label: this.t('unlink'),\r\n action: () => {\r\n const r = document.createRange();\r\n r.selectNodeContents(anchorEl);\r\n const s = window.getSelection();\r\n if (s) {\r\n s.removeAllRanges();\r\n s.addRange(r);\r\n }\r\n document.execCommand('unlink');\r\n this.closeDlg();\r\n this.onChange();\r\n }\r\n });\r\n }\r\n buttons.push(\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n const url = urlIn.value.trim();\r\n this.closeDlg();\r\n if (!url) return;\r\n if (anchorEl) {\r\n anchorEl.setAttribute('href', url);\r\n this.onChange();\r\n return;\r\n }\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s || s.isCollapsed) {\r\n document.execCommand('insertHTML', false, `<a href=\"${url.replace(/\"/g, '"')}\">${url\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')}</a>`);\r\n } else {\r\n document.execCommand('styleWithCSS', false, 'false');\r\n document.execCommand('createLink', false, url);\r\n }\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n }\r\n );\r\n this.dialog(\r\n this.t('linkttl'),\r\n (body) => {\r\n const row = document.createElement('div');\r\n row.style.cssText = 'display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px';\r\n const lbl = document.createElement('span');\r\n lbl.style.cssText = 'width:60px;color:#556;flex:none';\r\n lbl.textContent = this.t('linkurl');\r\n urlIn = document.createElement('input');\r\n urlIn.type = 'url';\r\n urlIn.placeholder = 'https://';\r\n urlIn.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit';\r\n urlIn.value = anchorEl?.getAttribute('href') || '';\r\n row.append(lbl, urlIn);\r\n body.appendChild(row);\r\n setTimeout(() => urlIn.focus(), 0);\r\n },\r\n buttons\r\n );\r\n }\r\n\r\n private blockItems(): MenuItemDef[] {\r\n return BLOCKS.map(([tag]) => ({\r\n label: this.blockLabel(tag),\r\n previewStyle: tag.startsWith('h')\r\n ? `font-weight:700;font-size:${22 - 2 * (+tag[1])}px`\r\n : tag === 'pre'\r\n ? 'font-family:monospace'\r\n : '',\r\n on: this.currentBlock() === tag,\r\n action: () => this.exec('formatBlock', '<' + tag + '>')\r\n }));\r\n }\r\n\r\n private blocksMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockItems()));\r\n }\r\n\r\n private alignItems(): MenuItemDef[] {\r\n const cmds: ['justifyLeft' | 'justifyCenter' | 'justifyRight' | 'justifyFull', keyof I18nStrings, string][] = [\r\n ['justifyLeft', 'alignleft', IC.alignleft],\r\n ['justifyCenter', 'aligncenter', IC.aligncenter],\r\n ['justifyRight', 'alignright', IC.alignright],\r\n ['justifyFull', 'alignjustify', IC.alignjustify]\r\n ];\r\n return cmds.map(([cmd, key, icon]) => ({\r\n label: this.t(key),\r\n icon,\r\n on: document.queryCommandState(cmd),\r\n action: () => this.exec(cmd)\r\n }));\r\n }\r\n\r\n private blockLabel(tag: string): string {\r\n if (tag === 'p') return this.t('para');\r\n if (tag === 'pre') return this.t('pre');\r\n return this.t('heading') + ' ' + tag[1];\r\n }\r\n\r\n private tableGrid(anchor: HTMLElement, after?: () => void): void {\r\n this.popup(anchor, (el) => this.buildTableGridInto(el, after));\r\n }\r\n\r\n private buildTableGridInto(el: HTMLElement, after?: () => void): void {\r\n {\r\n const wrap = document.createElement('div');\r\n wrap.className = 'tgridwrap';\r\n const grid = document.createElement('div');\r\n grid.className = 'tgrid';\r\n const lbl = document.createElement('div');\r\n lbl.className = 'tgridlbl';\r\n lbl.textContent = '1 × 1';\r\n const cells: HTMLSpanElement[] = [];\r\n for (let r = 0; r < 8; r++)\r\n for (let c = 0; c < 10; c++) {\r\n const sp = document.createElement('span');\r\n sp.dataset.r = String(r);\r\n sp.dataset.c = String(c);\r\n sp.addEventListener('mouseenter', () => {\r\n cells.forEach((x) => x.classList.toggle('hot', +x.dataset.r! <= r && +x.dataset.c! <= c));\r\n lbl.textContent = c + 1 + ' × ' + (r + 1);\r\n });\r\n sp.addEventListener('click', () => {\r\n this.closePop();\r\n this.insertTable(r + 1, c + 1);\r\n after?.();\r\n });\r\n cells.push(sp);\r\n grid.appendChild(sp);\r\n }\r\n wrap.append(grid, lbl);\r\n el.appendChild(wrap);\r\n }\r\n }\r\n\r\n private insertTable(rows: number, cols: number): void {\r\n this.restoreSel();\r\n /* table-layout:fixed keeps the columns evenly sized while typing —\r\n text wraps at the column edge instead of widening the column */\r\n let html = '<table style=\"border-collapse:collapse;width:100%;table-layout:fixed\"><tbody>';\r\n for (let r = 0; r < rows; r++) {\r\n html += '<tr>';\r\n for (let c = 0; c < cols; c++) html += '<td style=\"border:1px solid #b9c2cc\"><br></td>';\r\n html += '</tr>';\r\n }\r\n html += '</tbody></table><p><br></p>';\r\n document.execCommand('insertHTML', false, html);\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private setDir(dir: 'ltr' | 'rtl'): void {\r\n this.restoreSel();\r\n const blocks = this.selectedBlocks();\r\n if (blocks.length) blocks.forEach((b) => b.setAttribute('dir', dir));\r\n else this.ed.setAttribute('dir', dir);\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n /** Splits a toolbar layout string into groups of item names: `|` separates visual\r\n * groups, whitespace separates items within a group. Empty groups/tokens (e.g. from\r\n * leading/trailing/doubled separators) are dropped. Pure function. */\r\n private parseToolbarString(spec: string): string[][] {\r\n return spec\r\n .split('|')\r\n .map((group) => group.trim().split(/\\s+/).filter(Boolean))\r\n .filter((group) => group.length > 0);\r\n }\r\n\r\n /** Maps every supported toolbar item name to a builder for that one control. Each\r\n * entry is a direct lift of what used to be an inline call in `buildToolbar()` — no\r\n * behavior changes, just named lookup. Only `forecolor` yields multiple elements\r\n * (the quick color chips); everything else yields one. */\r\n private buildToolbarRegistry(): Record<string, () => HTMLElement | HTMLElement[]> {\r\n const tableBtn = this.tbtn(IC.tableic, this.t('quicktable'), () => this.tableGrid(tableBtn));\r\n const registry: Record<string, () => HTMLElement | HTMLElement[]> = {\r\n undo: () => this.tbtn(IC.undo, this.t('undo'), () => this.exec('undo')),\r\n redo: () => this.tbtn(IC.redo, this.t('redo'), () => this.exec('redo')),\r\n preview: () => this.tbtn(IC.prevw, this.t('preview'), () => this.previewDlg()),\r\n print: () => this.tbtn(IC.printic, this.t('print'), () => this.printDoc()),\r\n importword: () => this.tbtn(IC.wordic, this.t('importword'), () => this.pickWordDoc()),\r\n revhistory: () => this.tbtn(IC.historyic, this.t('revhistory'), () => this.revisionDlg()),\r\n fontfamily: () => this.tsel('w-font', 'fontsel', '', (b) => this.fontMenu(b)),\r\n fontsize: () => this.tsel('w-size', 'sizesel', '', (b) => this.sizeMenu(b)),\r\n fontsizeincrease: () => this.stepBtn(1),\r\n fontsizedecrease: () => this.stepBtn(-1),\r\n bold: () => this.tbtn(IC.bold, this.t('bold'), () => this.exec('bold'), 'bold'),\r\n italic: () => this.tbtn(IC.italic, this.t('italic'), () => this.exec('italic'), 'italic'),\r\n underline: () => this.tbtn(IC.underline, this.t('underline'), () => this.exec('underline'), 'underline'),\r\n strikethrough: () => this.tbtn(IC.strikethrough, this.t('strikethrough'), () => this.exec('strikeThrough'), 'strikeThrough'),\r\n forecolor: () => this.colorChips(),\r\n backcolor: () =>\r\n this.menuTbtn(\r\n IC.backcolor + '<span class=\"colorbar\" data-cb=\"back\"></span>',\r\n this.t('backcolor'),\r\n (b) => this.colorMenu(b, 'back')\r\n ),\r\n alignleft: () => this.tbtn(IC.alignleft, this.t('alignleft'), () => this.exec('justifyLeft'), 'justifyLeft'),\r\n aligncenter: () => this.tbtn(IC.aligncenter, this.t('aligncenter'), () => this.exec('justifyCenter'), 'justifyCenter'),\r\n alignright: () => this.tbtn(IC.alignright, this.t('alignright'), () => this.exec('justifyRight'), 'justifyRight'),\r\n alignjustify: () => this.tbtn(IC.alignjustify, this.t('alignjustify'), () => this.exec('justifyFull'), 'justifyFull'),\r\n bullist: () => this.menuTbtn(IC.bullist, this.t('bullist'), (b) => this.listMenu(b, 'ul'), 'insertUnorderedList'),\r\n numlist: () => this.menuTbtn(IC.numlist, this.t('numlist'), (b) => this.listMenu(b, 'ol'), 'insertOrderedList'),\r\n outdent: () => this.tbtn(IC.outdent, this.t('outdent'), () => this.exec('outdent')),\r\n indent: () => this.tbtn(IC.indent, this.t('indent'), () => this.exec('indent')),\r\n link: () => this.tbtn(IC.link, this.t('linkttl'), () => this.linkDlg()),\r\n blockquote: () => this.tbtn(IC.quote, this.t('quote'), () => this.toggleBlock('blockquote'), 'blockquote'),\r\n code: () => this.tbtn(IC.inlinecodeic, this.t('code'), () => this.toggleInlineCode(), 'code'),\r\n codesample: () => this.tbtn(IC.codesampleic, this.t('codesample'), () => this.codeDlg()),\r\n changecase: () => this.menuTbtn(IC.caseic, this.t('changecase'), (b) => this.caseMenu(b)),\r\n lineheight: () => this.menuTbtn(IC.lineheight, this.t('lineheight'), (b) => this.lineHeightMenu(b)),\r\n wordspacing: () => this.menuTbtn(IC.wordspacing, this.t('wordspacing'), (b) => this.wordSpacingMenu(b)),\r\n letterspacing: () => this.menuTbtn(IC.letterspacing, this.t('letterspacing'), (b) => this.letterSpacingMenu(b)),\r\n removeformat: () => this.tbtn(IC.clearformatic, this.t('removeformat'), () => this.exec('removeFormat')),\r\n blocks: () => this.tsel('w-block', 'blocksel', this.t('para'), (b) => this.blocksMenu(b)),\r\n ltr: () => this.tbtn(IC.ltr, this.t('ltr'), () => this.setDir('ltr'), 'ltr'),\r\n rtl: () => this.tbtn(IC.rtl, this.t('rtl'), () => this.setDir('rtl'), 'rtl'),\r\n quickimage: () => this.tbtn(IC.image, this.t('quickimage'), () => this.insertImagePlaceholder()),\r\n quickvideo: () => this.tbtn(IC.video, this.t('quickvideo'), () => this.videoDlg()),\r\n quicktable: () => tableBtn,\r\n template: () => this.menuTbtn(IC.templateic, this.t('template'), (b) => this.templateMenu(b)),\r\n charmap: () => this.tbtn(IC.charic, this.t('charmap'), () => this.charMap()),\r\n emoji: () => this.tbtn(IC.emojiic, this.t('emoji'), () => this.emojiMap()),\r\n fullscreen: () => this.tbtn(IC.fullscreen, this.t('fullscreen'), () => this.toggleFullscreen(), 'fullscreen'),\r\n sourcecode: () => this.tbtn(IC.srcic, this.t('sourcecode'), () => this.sourceDlg())\r\n };\r\n /* TinyMCE-compatible aliases so common TinyMCE toolbar strings\r\n (e.g. \"undo redo | styles | ... | link image media\") work as-is */\r\n registry.styles = registry.blocks;\r\n registry.image = registry.quickimage;\r\n registry.media = registry.quickvideo;\r\n registry.table = registry.quicktable;\r\n return registry;\r\n }\r\n\r\n private buildToolbar(): void {\r\n this.toolbar.innerHTML = '';\r\n const spec = this.options.toolbar === true ? DEFAULT_TOOLBAR : (this.options.toolbar as string);\r\n const registry = this.buildToolbarRegistry();\r\n this.parseToolbarString(spec).forEach((tokens) => {\r\n const elements: HTMLElement[] = [];\r\n tokens.forEach((token) => {\r\n const builder = registry[token];\r\n if (!builder) {\r\n console.warn(`FableEditor: unknown toolbar item \"${token}\"`);\r\n return;\r\n }\r\n const result = builder();\r\n if (Array.isArray(result)) elements.push(...result);\r\n else elements.push(result);\r\n });\r\n if (elements.length) this.toolbar.appendChild(this.group(...elements));\r\n });\r\n this.tbrMore = this.tbtn(IC.more, this.t('more'), () => {\r\n this.tbrExpanded = !this.tbrExpanded;\r\n this.updateToolbarOverflow();\r\n });\r\n this.tbrMore.classList.add('tbr-more');\r\n this.toolbar.appendChild(this.tbrMore);\r\n this.syncColorSwatches(this.toolbar);\r\n this.updateToolbarOverflow();\r\n }\r\n\r\n /** xs/sm/md editors (< 992px wide) collapse an overflowing toolbar to one row +\r\n * \"…\" expander; at lg widths and up the toolbar wraps to multiple rows as before. */\r\n private static readonly TBR_COLLAPSE_MAX = 992;\r\n\r\n /** Responsive one-line toolbar: on mobile/tablet widths (or a narrow host\r\n * container) a toolbar that can't fit on a single row collapses to one\r\n * clipped row plus a trailing \"…\" button that expands/collapses the full\r\n * set. Driven by the editor's own width, so it also applies to narrow\r\n * panels on desktop. */\r\n private updateToolbarOverflow(): void {\r\n const tb = this.toolbar;\r\n if (!this.tbrMore) return;\r\n tb.classList.add('tbr-measure');\r\n const overflows = tb.scrollWidth > tb.clientWidth + 1;\r\n tb.classList.remove('tbr-measure');\r\n const narrow = this.shell.offsetWidth < FableEditor.TBR_COLLAPSE_MAX;\r\n if (!overflows || !narrow) {\r\n this.tbrExpanded = false;\r\n tb.classList.remove('collapsible', 'expanded');\r\n this.tbrMore.classList.remove('on');\r\n return;\r\n }\r\n tb.classList.add('collapsible');\r\n tb.classList.toggle('expanded', this.tbrExpanded);\r\n this.tbrMore.classList.toggle('on', this.tbrExpanded);\r\n }\r\n\r\n /* ---------------------------------------------------------- menubar */\r\n private mItem(label: keyof I18nStrings, icon: string | undefined, action: () => void, shortcut?: string): MenuItemDef {\r\n return { label: this.t(label), icon, action, shortcut };\r\n }\r\n\r\n private buildMenubar(): void {\r\n this.menubar.innerHTML = '';\r\n const menus: Record<string, (MenuItemDef | '|')[]> = {\r\n file: [\r\n this.mItem('newdoc', IC.newic, () => {\r\n this.recordRevision();\r\n this.ed.innerHTML = '<p><br></p>';\r\n this.onChange();\r\n }),\r\n '|',\r\n this.mItem('importword', IC.wordic, () => this.pickWordDoc()),\r\n this.mItem('restoredraft', IC.draftic, () => {\r\n if (!this.restoreDraft()) alert(this.t('draftempty'));\r\n }),\r\n this.mItem('revhistory', IC.historyic, () => this.revisionDlg()),\r\n '|',\r\n this.mItem('preview', IC.prevw, () => this.previewDlg()),\r\n this.mItem('print', IC.printic, () => this.printDoc(), 'Ctrl+P')\r\n ],\r\n edit: [\r\n this.mItem('undo', IC.undo, () => this.exec('undo'), 'Ctrl+Z'),\r\n this.mItem('redo', IC.redo, () => this.exec('redo'), 'Ctrl+Y'),\r\n '|',\r\n this.mItem('cut', IC.cutic, () => this.exec('cut'), 'Ctrl+X'),\r\n this.mItem('copy', IC.copyic, () => this.exec('copy'), 'Ctrl+C'),\r\n this.mItem('paste', IC.pasteic, () => alert(this.t('pastehint')), 'Ctrl+V'),\r\n '|',\r\n this.mItem('selectall', IC.selall, () => this.exec('selectAll'), 'Ctrl+A')\r\n ],\r\n view: [\r\n this.mItem('fullscreen', IC.fullscreen, () => this.toggleFullscreen()),\r\n this.mItem('preview', IC.prevw, () => this.previewDlg()),\r\n this.mItem('sourcecode', IC.srcic, () => this.sourceDlg())\r\n ],\r\n insert: [\r\n this.mItem('link', IC.link, () => this.linkDlg()),\r\n this.mItem('image', IC.image, () => this.insertImagePlaceholder()),\r\n this.mItem('video', IC.video, () => this.videoDlg()),\r\n { label: this.t('inserttable'), icon: IC.tableic, action: () => this.tableGrid((this.menubar.querySelector('[data-menu-key=\"table\"]') as HTMLElement) || this.menubar) },\r\n this.mItem('codesample', IC.codesampleic, () => this.codeDlg()),\r\n { label: this.t('template'), icon: IC.templateic, subBuild: (el) => this.buildTemplatePickInto(el) },\r\n this.mItem('hr', IC.hric, () => this.exec('insertHorizontalRule')),\r\n '|',\r\n this.mItem('charmap', IC.charic, () => this.charMap()),\r\n this.mItem('emoji', IC.emojiic, () => this.emojiMap()),\r\n this.mItem('datetime', IC.dateic, () =>\r\n this.exec('insertText', new Date().toLocaleString(this.lang === 'ar' ? 'ar-AE' : 'en-GB'))\r\n ),\r\n '|',\r\n {\r\n label: this.t('pagebreak'),\r\n icon: IC.pbic,\r\n action: () => {\r\n this.restoreSel();\r\n document.execCommand('insertHTML', false, '<hr class=\"pagebreak\"><p><br></p>');\r\n this.onChange();\r\n }\r\n },\r\n this.mItem('nbsp', IC.nbspic, () => this.exec('insertText', '\\u00A0'))\r\n ],\r\n format: [\r\n this.mItem('bold', IC.bold, () => this.exec('bold'), 'Ctrl+B'),\r\n this.mItem('italic', IC.italic, () => this.exec('italic'), 'Ctrl+I'),\r\n this.mItem('underline', IC.underline, () => this.exec('underline'), 'Ctrl+U'),\r\n this.mItem('strikethrough', IC.strikethrough, () => this.exec('strikeThrough')),\r\n this.mItem('superscript', IC.superscriptic, () => this.exec('superscript')),\r\n this.mItem('subscript', IC.subscriptic, () => this.exec('subscript')),\r\n this.mItem('code', IC.inlinecodeic, () => this.toggleInlineCode()),\r\n this.mItem('quote', IC.quote, () => this.toggleBlock('blockquote')),\r\n '|',\r\n { label: this.t('fontfamily'), subBuild: (el) => this.menuItems(el, this.fontItems()) },\r\n { label: this.t('fontsize'), subBuild: (el) => this.menuItems(el, this.sizeItems()) },\r\n { label: this.t('blocks'), subBuild: (el) => this.menuItems(el, this.blockItems()) },\r\n { label: this.t('align'), subBuild: (el) => this.menuItems(el, this.alignItems()) },\r\n { label: this.t('lineheight'), icon: IC.lineheight, subBuild: (el) => this.menuItems(el, this.blockStyleItems('lineHeight', LINE_HEIGHTS)) },\r\n { label: this.t('wordspacing'), icon: IC.wordspacing, subBuild: (el) => this.menuItems(el, this.blockStyleItems('wordSpacing', WORD_SPACINGS)) },\r\n { label: this.t('letterspacing'), icon: IC.letterspacing, subBuild: (el) => this.menuItems(el, this.blockStyleItems('letterSpacing', LETTER_SPACINGS)) },\r\n '|',\r\n { label: this.t('forecolor'), icon: IC.palette, subBuild: (el) => this.buildPaletteInto(el, this.foreColor, (c) => this.applyColor('fore', c)) },\r\n { label: this.t('backcolor'), icon: IC.backcolor, subBuild: (el) => this.buildPaletteInto(el, this.backColor, (c) => this.applyColor('back', c)) },\r\n '|',\r\n this.mItem('bullist', IC.bullist, () => this.exec('insertUnorderedList')),\r\n this.mItem('numlist', IC.numlist, () => this.exec('insertOrderedList')),\r\n this.mItem('outdent', IC.outdent, () => this.exec('outdent')),\r\n this.mItem('indent', IC.indent, () => this.exec('indent')),\r\n '|',\r\n this.mItem('ltr', IC.ltr, () => this.setDir('ltr')),\r\n this.mItem('rtl', IC.rtl, () => this.setDir('rtl')),\r\n '|',\r\n { label: this.t('changecase'), icon: IC.caseic, sub: this.caseItems() },\r\n '|',\r\n this.mItem('clearformat', IC.clearformatic, () => this.exec('removeFormat'))\r\n ],\r\n tools: [this.mItem('sourcecode', IC.srcic, () => this.sourceDlg()), this.mItem('wordcount', IC.wcic, () => this.wordCountDlg())],\r\n table: [\r\n { label: this.t('inserttable'), icon: IC.tableic, subBuild: (el) => this.buildTableGridInto(el) },\r\n '|',\r\n {\r\n label: this.t('cell'),\r\n sub: [\r\n { label: this.t('cellprops'), icon: IC.tableic, action: () => this.cellPropsDlg() },\r\n { label: this.t('cellbg'), icon: IC.palette, subBuild: (el) => this.buildCellFillInto(el) }\r\n ]\r\n },\r\n {\r\n label: this.t('row'),\r\n sub: [\r\n { label: this.t('rowabove'), icon: IC.rowbefore, action: () => this.tableOp('rowabove'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n { label: this.t('rowbelow'), icon: IC.rowafter, action: () => this.tableOp('rowbelow'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n { label: this.t('delrow'), icon: IC.rowdelete, action: () => this.tableOp('delrow'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n '|',\r\n { label: this.t('moverowup'), icon: IC.moverowup, action: () => this.tableMove('rowup'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n { label: this.t('moverowdown'), icon: IC.moverowdown, action: () => this.tableMove('rowdown'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n '|',\r\n { label: this.t('rowprops'), icon: IC.tableic, action: () => this.rowPropsDlg(), hover: (on) => this.setOpTarget(on ? 'row' : null) }\r\n ]\r\n },\r\n {\r\n label: this.t('column'),\r\n sub: [\r\n { label: this.t('colbefore'), icon: IC.colbefore, action: () => this.tableOp('colbefore'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n { label: this.t('colafter'), icon: IC.colafter, action: () => this.tableOp('colafter'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n { label: this.t('delcol'), icon: IC.coldelete, action: () => this.tableOp('delcol'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n '|',\r\n { label: this.t('movecolleft'), icon: IC.movecolleft, action: () => this.tableMove('colleft'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n { label: this.t('movecolright'), icon: IC.movecolright, action: () => this.tableMove('colright'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n '|',\r\n { label: this.t('colprops'), icon: IC.tableic, action: () => this.colPropsDlg(), hover: (on) => this.setOpTarget(on ? 'col' : null) }\r\n ]\r\n },\r\n '|',\r\n {\r\n label: this.t('tablepropsttl'),\r\n icon: IC.tableic,\r\n action: () => {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n this.tblActive = cell.closest('table');\r\n this.tablePropsDlg();\r\n }\r\n },\r\n { label: this.t('deltable'), icon: IC.trash, action: () => this.tableOp('deltable') }\r\n ],\r\n help: [this.mItem('helpttl', IC.helpic, () => this.helpDlg(), 'Alt+0')]\r\n };\r\n const spec = this.options.menubar === true ? DEFAULT_MENUBAR : (this.options.menubar as string);\r\n const seen = new Set<string>();\r\n spec\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n .forEach((key) => {\r\n if (seen.has(key)) return;\r\n seen.add(key);\r\n if (!menus[key]) {\r\n console.warn(`FableEditor: unknown menubar item \"${key}\"`);\r\n return;\r\n }\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = this.t(key as keyof I18nStrings);\r\n b.dataset.menuKey = key;\r\n b.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n this.saveSel();\r\n });\r\n b.addEventListener('click', () => this.popup(b, (el) => this.menuItems(el, menus[key])));\r\n this.menubar.appendChild(b);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- table ops */\r\n private tableOp(op: string): void {\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s) return;\r\n const cell =\r\n this.closestBlock(s.anchorNode)?.closest('td,th') ||\r\n (s.anchorNode && (s.anchorNode as Element).nodeType === 1 ? (s.anchorNode as Element).closest?.('td,th') : null);\r\n if (!cell) return;\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n const table = cell.closest('table') as HTMLTableElement;\r\n const idx = Array.from(row.children).indexOf(cell as HTMLTableCellElement);\r\n const newRow = () => {\r\n const r = row.cloneNode(false) as HTMLTableRowElement;\r\n Array.from(row.children).forEach((src) => {\r\n const td = document.createElement('td');\r\n /* carry the source cell's inline style so borders / padding /\r\n column widths survive on inserted rows */\r\n const st = (src as HTMLElement).getAttribute('style');\r\n if (st) td.setAttribute('style', st);\r\n td.style.removeProperty('background-color');\r\n td.innerHTML = '<br>';\r\n r.appendChild(td);\r\n });\r\n return r;\r\n };\r\n if (op === 'rowabove') row.before(newRow());\r\n if (op === 'rowbelow') row.after(newRow());\r\n if (op === 'delrow') {\r\n const body = row.parentElement!;\r\n row.remove();\r\n if (!body.querySelector('tr')) table.remove();\r\n }\r\n if (op === 'colbefore' || op === 'colafter') {\r\n table.querySelectorAll('tr').forEach((tr) => {\r\n const ref = tr.children[Math.min(idx, tr.children.length - 1)] as HTMLElement;\r\n const td = document.createElement('td');\r\n /* carry the reference cell's inline style so borders / padding\r\n survive on inserted columns; width is dropped so the new\r\n column shares the table space instead of doubling it */\r\n const st = ref.getAttribute('style');\r\n if (st) td.setAttribute('style', st);\r\n td.style.removeProperty('width');\r\n td.style.removeProperty('background-color');\r\n td.innerHTML = '<br>';\r\n op === 'colbefore' ? ref.before(td) : ref.after(td);\r\n });\r\n }\r\n if (op === 'delcol') {\r\n table.querySelectorAll('tr').forEach((tr) => tr.children[idx]?.remove());\r\n if (!table.querySelector('td,th')) table.remove();\r\n }\r\n if (op === 'deltable') table.remove();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n\r\n /** Reorders the current row/column: 'rowup'/'rowdown' swap the caret's row with\r\n * its neighbour, 'colleft'/'colright' move the caret's column one position in\r\n * DOM order across every row. The caret travels with the moved cell. */\r\n private tableMove(op: 'rowup' | 'rowdown' | 'colleft' | 'colright'): void {\r\n this.restoreSel();\r\n const cell = this.currentCell();\r\n if (!cell) return;\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n const table = cell.closest('table') as HTMLTableElement;\r\n const idx = Array.from(row.children).indexOf(cell);\r\n if (op === 'rowup') {\r\n const prev = row.previousElementSibling;\r\n if (prev) prev.before(row);\r\n }\r\n if (op === 'rowdown') {\r\n const next = row.nextElementSibling;\r\n if (next) next.after(row);\r\n }\r\n if (op === 'colleft' && idx > 0) {\r\n table.querySelectorAll('tr').forEach((tr) => {\r\n const c = tr.children[idx];\r\n const prev = tr.children[idx - 1];\r\n if (c && prev) prev.before(c);\r\n });\r\n }\r\n if (op === 'colright') {\r\n table.querySelectorAll('tr').forEach((tr) => {\r\n const c = tr.children[idx];\r\n const next = tr.children[idx + 1];\r\n if (c && next) next.after(c);\r\n });\r\n }\r\n /* moving a node resets live ranges inside it (they collapse to the old\r\n parent), so put the caret back into the moved cell explicitly — this is\r\n what lets the user click \"move\" repeatedly to walk a row/column along */\r\n const range = document.createRange();\r\n range.selectNodeContents(cell);\r\n range.collapse(true);\r\n const s = window.getSelection();\r\n if (s) {\r\n s.removeAllRanges();\r\n s.addRange(range);\r\n }\r\n this.saveSel();\r\n this.onChange();\r\n this.positionTableHandles();\r\n this.positionCellMarker();\r\n }\r\n\r\n /** Align the whole table via auto margins — same semantics as the align\r\n * field in the table-properties dialog. */\r\n private alignTable(align: 'left' | 'center' | 'right'): void {\r\n const table = this.tblActive;\r\n if (!table) return;\r\n table.style.marginLeft = align === 'left' ? '0' : 'auto';\r\n table.style.marginRight = align === 'right' ? '0' : 'auto';\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n\r\n /** Color grid applying a background to the caret's cell — the direct way to\r\n * build header rows (the toolbar's backcolor highlights text, not cells). */\r\n private buildCellFillInto(el: HTMLElement): void {\r\n const apply = (c: string | null) => {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n this.setOrClear(cell, 'background-color', c || '');\r\n this.onChange();\r\n };\r\n const cell = this.currentCell();\r\n this.buildPaletteInto(el, this.cssToHex(cell ? cell.style.backgroundColor : ''), apply);\r\n }\r\n\r\n /** style.backgroundColor reads back as rgb(...) — normalise to #rrggbb for the picker. */\r\n private cssToHex(c: string): string {\r\n const m = c.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n return m ? '#' + m.slice(1, 4).map((n) => (+n).toString(16).padStart(2, '0')).join('') : c;\r\n }\r\n\r\n private cellFillMenu(anchor: HTMLElement): void {\r\n this.popup(anchor, (el) => this.buildCellFillInto(el), 'pop-cellbg');\r\n }\r\n\r\n private applyTableProps(table: HTMLTableElement, vals: Record<string, string>): void {\r\n if (vals.width) table.style.width = /^\\d+$/.test(vals.width) ? vals.width + 'px' : vals.width;\r\n else table.style.removeProperty('width');\r\n\r\n const cells = Array.from(table.querySelectorAll('td,th')) as HTMLElement[];\r\n if (vals.cellpadding !== '') cells.forEach((c) => (c.style.padding = vals.cellpadding + 'px'));\r\n else cells.forEach((c) => c.style.removeProperty('padding'));\r\n\r\n if (vals.cellspacing !== '') {\r\n table.style.borderCollapse = 'separate';\r\n table.style.borderSpacing = vals.cellspacing + 'px';\r\n } else {\r\n table.style.borderCollapse = 'collapse';\r\n table.style.removeProperty('border-spacing');\r\n }\r\n\r\n if (vals.border !== '' && +vals.border > 0) {\r\n table.style.border = vals.border + 'px solid #b9c2cc';\r\n cells.forEach((c) => (c.style.border = vals.border + 'px solid #b9c2cc'));\r\n } else {\r\n table.style.removeProperty('border');\r\n cells.forEach((c) => c.style.removeProperty('border'));\r\n }\r\n\r\n table.style.removeProperty('margin-left');\r\n table.style.removeProperty('margin-right');\r\n if (vals.align === 'center') {\r\n table.style.marginLeft = 'auto';\r\n table.style.marginRight = 'auto';\r\n } else if (vals.align === 'right') {\r\n table.style.marginLeft = 'auto';\r\n table.style.marginRight = '0';\r\n } else if (vals.align === 'left') {\r\n table.style.marginLeft = '0';\r\n table.style.marginRight = 'auto';\r\n }\r\n }\r\n\r\n private tablePropsDlg(): void {\r\n const table = this.tblActive;\r\n if (!table) return;\r\n let wIn: HTMLInputElement;\r\n let padIn: HTMLInputElement;\r\n let spIn: HTMLInputElement;\r\n let bIn: HTMLInputElement;\r\n let alignSel: HTMLSelectElement;\r\n const rowStyle = 'display:flex;align-items:center;gap:10px;margin:10px 0';\r\n const lblStyle = 'width:120px;color:#556;flex:none';\r\n const inputStyle = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit';\r\n const firstCell = table.querySelector('td,th') as HTMLElement | null;\r\n const curWidth = table.style.width || '';\r\n const curPad = firstCell && firstCell.style.padding ? parseFloat(firstCell.style.padding) : '';\r\n const curSp = table.style.borderSpacing ? parseFloat(table.style.borderSpacing) : '';\r\n const curBorder = table.style.borderWidth ? parseFloat(table.style.borderWidth) : '';\r\n const ml = table.style.marginLeft;\r\n const mr = table.style.marginRight;\r\n const curAlign = ml === 'auto' && mr === 'auto' ? 'center' : ml === 'auto' ? 'right' : mr === 'auto' && ml === '0' ? 'left' : '';\r\n\r\n this.dialog(\r\n this.t('tablepropsttl'),\r\n (body) => {\r\n const mk = (labelKey: keyof I18nStrings, el: HTMLElement) => {\r\n const row = document.createElement('div');\r\n row.style.cssText = rowStyle;\r\n const lbl = document.createElement('span');\r\n lbl.style.cssText = lblStyle;\r\n lbl.textContent = this.t(labelKey);\r\n row.append(lbl, el);\r\n body.appendChild(row);\r\n };\r\n wIn = document.createElement('input');\r\n wIn.type = 'text';\r\n wIn.style.cssText = inputStyle;\r\n wIn.placeholder = 'e.g. 600px or 100%';\r\n wIn.value = curWidth as string;\r\n mk('tblwidth', wIn);\r\n padIn = document.createElement('input');\r\n padIn.type = 'number';\r\n padIn.min = '0';\r\n padIn.style.cssText = inputStyle;\r\n padIn.value = String(curPad);\r\n mk('tblcellpadding', padIn);\r\n spIn = document.createElement('input');\r\n spIn.type = 'number';\r\n spIn.min = '0';\r\n spIn.style.cssText = inputStyle;\r\n spIn.value = String(curSp);\r\n mk('tblcellspacing', spIn);\r\n bIn = document.createElement('input');\r\n bIn.type = 'number';\r\n bIn.min = '0';\r\n bIn.style.cssText = inputStyle;\r\n bIn.value = String(curBorder);\r\n mk('tblborder', bIn);\r\n alignSel = document.createElement('select');\r\n alignSel.style.cssText = inputStyle;\r\n (\r\n [\r\n ['', 'alignnone'],\r\n ['left', 'alignleft'],\r\n ['center', 'aligncenter'],\r\n ['right', 'alignright']\r\n ] as [string, keyof I18nStrings][]\r\n ).forEach(([v, k]) => {\r\n const o = document.createElement('option');\r\n o.value = v;\r\n o.textContent = this.t(k);\r\n if (v === curAlign) o.selected = true;\r\n alignSel.appendChild(o);\r\n });\r\n mk('tblalign', alignSel);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.applyTableProps(table, {\r\n width: wIn.value.trim(),\r\n cellpadding: padIn.value.trim(),\r\n cellspacing: spIn.value.trim(),\r\n border: bIn.value.trim(),\r\n align: alignSel.value\r\n });\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n /* ------------------------------------------- cell / row / column props */\r\n private currentCell(): HTMLTableCellElement | null {\r\n let node: Node | null = this.savedRange ? this.savedRange.startContainer : null;\r\n if (!node || !this.ed.contains(node)) {\r\n const s = window.getSelection();\r\n node = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\r\n }\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && /^(TD|TH)$/.test((node as HTMLElement).tagName)) {\r\n return node as HTMLTableCellElement;\r\n }\r\n node = node.parentNode;\r\n }\r\n return null;\r\n }\r\n\r\n private toHexColor(c: string): string {\r\n if (/^#[0-9a-fA-F]{6}$/.test(c)) return c;\r\n const m = /rgba?\\((\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)/.exec(c);\r\n if (!m) return '';\r\n return '#' + [m[1], m[2], m[3]].map((n) => (+n).toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n private formRow(body: HTMLElement, label: string, el: HTMLElement): void {\r\n const row = document.createElement('div');\r\n row.style.cssText = 'display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px';\r\n const lbl = document.createElement('span');\r\n lbl.style.cssText = 'width:120px;color:#556;flex:none';\r\n lbl.textContent = label;\r\n row.append(lbl, el);\r\n body.appendChild(row);\r\n }\r\n\r\n private formInput(value: string, placeholder = ''): HTMLInputElement {\r\n const i = document.createElement('input');\r\n i.type = 'text';\r\n i.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;min-width:0';\r\n i.value = value;\r\n i.placeholder = placeholder;\r\n return i;\r\n }\r\n\r\n private formSelect(options: [string, string][], cur: string): HTMLSelectElement {\r\n const sel = document.createElement('select');\r\n sel.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;background:#fff';\r\n options.forEach(([v, label]) => {\r\n const o = document.createElement('option');\r\n o.value = v;\r\n o.textContent = label;\r\n if (v === cur) o.selected = true;\r\n sel.appendChild(o);\r\n });\r\n return sel;\r\n }\r\n\r\n private formBg(cur: string): { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement } {\r\n const wrap = document.createElement('div');\r\n wrap.style.cssText = 'flex:1;display:flex;align-items:center;gap:8px';\r\n const hex = this.toHexColor(cur);\r\n const color = document.createElement('input');\r\n color.type = 'color';\r\n color.value = hex || '#ffffff';\r\n color.style.cssText = 'width:36px;height:29px;border:1px solid #cfd6df;border-radius:4px;padding:1px;background:none;cursor:pointer';\r\n const lbl = document.createElement('label');\r\n lbl.style.cssText = 'display:flex;align-items:center;gap:6px;cursor:pointer;color:#556';\r\n const fill = document.createElement('input');\r\n fill.type = 'checkbox';\r\n fill.checked = !!hex;\r\n lbl.append(fill, document.createTextNode(this.t('fill')));\r\n color.addEventListener('input', () => (fill.checked = true));\r\n wrap.append(color, lbl);\r\n return { wrap, color, fill };\r\n }\r\n\r\n private setOrClear(el: HTMLElement, prop: string, val: string): void {\r\n if (val) el.style.setProperty(prop, /^(width|height)$/.test(prop) && /^\\d+$/.test(val) ? val + 'px' : val);\r\n else el.style.removeProperty(prop);\r\n }\r\n\r\n private cellPropsDlg(): void {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n let wIn: HTMLInputElement;\r\n let hIn: HTMLInputElement;\r\n let alignSel: HTMLSelectElement;\r\n let vSel: HTMLSelectElement;\r\n let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\r\n this.dialog(\r\n this.t('cellprops').replace('…', ''),\r\n (body) => {\r\n wIn = this.formInput(cell.style.width, 'e.g. 120px / 25%');\r\n this.formRow(body, this.t('tblwidth'), wIn);\r\n hIn = this.formInput(cell.style.height, 'e.g. 40px');\r\n this.formRow(body, this.t('tblheight'), hIn);\r\n alignSel = this.formSelect(\r\n [\r\n ['', this.t('alignnone')],\r\n ['left', this.t('alignleft')],\r\n ['center', this.t('aligncenter')],\r\n ['right', this.t('alignright')]\r\n ],\r\n cell.style.textAlign || ''\r\n );\r\n this.formRow(body, this.t('tblalign'), alignSel);\r\n vSel = this.formSelect(\r\n [\r\n ['', this.t('alignnone')],\r\n ['top', this.t('valigntop')],\r\n ['middle', this.t('valignmiddle')],\r\n ['bottom', this.t('valignbottom')]\r\n ],\r\n cell.style.verticalAlign || ''\r\n );\r\n this.formRow(body, this.t('valign'), vSel);\r\n bg = this.formBg(cell.style.backgroundColor || '');\r\n this.formRow(body, this.t('backcolor'), bg.wrap);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.setOrClear(cell, 'width', wIn.value.trim());\r\n this.setOrClear(cell, 'height', hIn.value.trim());\r\n this.setOrClear(cell, 'text-align', alignSel.value);\r\n this.setOrClear(cell, 'vertical-align', vSel.value);\r\n this.setOrClear(cell, 'background-color', bg.fill.checked ? bg.color.value : '');\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private rowPropsDlg(): void {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n let hIn: HTMLInputElement;\r\n let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\r\n this.dialog(\r\n this.t('rowprops').replace('…', ''),\r\n (body) => {\r\n hIn = this.formInput(row.style.height, 'e.g. 40px');\r\n this.formRow(body, this.t('tblheight'), hIn);\r\n bg = this.formBg(row.style.backgroundColor || '');\r\n this.formRow(body, this.t('backcolor'), bg.wrap);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.setOrClear(row, 'height', hIn.value.trim());\r\n this.setOrClear(row, 'background-color', bg.fill.checked ? bg.color.value : '');\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private colPropsDlg(): void {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n const table = cell.closest('table') as HTMLTableElement;\r\n const idx = Array.from(row.children).indexOf(cell);\r\n const colCells = Array.from(table.rows)\r\n .map((r) => r.cells[idx])\r\n .filter(Boolean) as HTMLTableCellElement[];\r\n let wIn: HTMLInputElement;\r\n let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\r\n this.dialog(\r\n this.t('colprops').replace('…', ''),\r\n (body) => {\r\n wIn = this.formInput(cell.style.width, 'e.g. 120px / 25%');\r\n this.formRow(body, this.t('tblwidth'), wIn);\r\n bg = this.formBg(cell.style.backgroundColor || '');\r\n this.formRow(body, this.t('backcolor'), bg.wrap);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n colCells.forEach((c) => {\r\n this.setOrClear(c, 'width', wIn.value.trim());\r\n this.setOrClear(c, 'background-color', bg.fill.checked ? bg.color.value : '');\r\n });\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n /* ---------------------------------------------------------- dialogs */\r\n private closeDlg(): void {\r\n if (this.dlgOvl) {\r\n this.dlgOvl.remove();\r\n this.dlgOvl = null;\r\n }\r\n }\r\n\r\n private dialog(title: string, bodyBuild: (body: HTMLElement) => void, buttons?: DialogButton[]): void {\r\n this.closeDlg();\r\n this.closePop();\r\n this.dlgOvl = document.createElement('div');\r\n this.dlgOvl.className = 'ovl';\r\n const d = document.createElement('div');\r\n d.className = 'dlg';\r\n d.dir = this.dir();\r\n d.innerHTML = `<header><span>${title}</span><button type=\"button\">×</button></header>\r\n <div class=\"body\"></div><footer></footer>`;\r\n (d.querySelector('header button') as HTMLButtonElement).onclick = () => this.closeDlg();\r\n bodyBuild(d.querySelector('.body') as HTMLElement);\r\n (buttons || [{ label: this.t('close'), primary: true, action: () => this.closeDlg() }]).forEach((b) => {\r\n const btn = document.createElement('button');\r\n btn.type = 'button';\r\n btn.textContent = b.label;\r\n if (b.primary) btn.className = 'pri';\r\n btn.onclick = b.action;\r\n d.querySelector('footer')!.appendChild(btn);\r\n });\r\n this.dlgOvl.appendChild(d);\r\n this.dlgOvl.addEventListener('mousedown', (e) => {\r\n if (e.target === this.dlgOvl) this.closeDlg();\r\n });\r\n document.body.appendChild(this.dlgOvl);\r\n }\r\n\r\n private sourceDlg(): void {\r\n let ta: HTMLTextAreaElement;\r\n this.dialog(\r\n this.t('srcttl'),\r\n (body) => {\r\n ta = document.createElement('textarea');\r\n ta.value = this.ed.innerHTML.replace(/></g, '>\\n<');\r\n body.appendChild(ta);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.ed.innerHTML = ta.value;\r\n this.closeDlg();\r\n this.onChange();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private helpDlg(): void {\r\n this.dialog(this.t('helpttl'), (body) => {\r\n const rows = [\r\n ['Ctrl+B', this.t('bold')],\r\n ['Ctrl+I', this.t('italic')],\r\n ['Ctrl+U', this.t('underline')],\r\n ['Ctrl+Z', this.t('undo')],\r\n ['Ctrl+Y', this.t('redo')],\r\n ['Ctrl+A', this.t('selectall')],\r\n ['Alt+0', this.t('helpttl')]\r\n ];\r\n body.innerHTML = `<p style=\"color:#556\">${this.t('shortcuts')}</p>\r\n <table class=\"kbd\">${rows.map((r) => `<tr><td>${r[1]}</td><td><kbd>${r[0]}</kbd></td></tr>`).join('')}</table>`;\r\n });\r\n }\r\n\r\n private wordCountDlg(): void {\r\n this.dialog(this.t('wcttl'), (body) => {\r\n body.innerHTML = `<table class=\"kbd\">\r\n <tr><td>${this.t('wcwords')}</td><td>${this.countWords()}</td></tr>\r\n <tr><td>${this.t('wcchars')}</td><td>${this.ed.textContent?.replace(/\\s/g, '').length ?? 0}</td></tr></table>`;\r\n });\r\n }\r\n\r\n private previewDlg(): void {\r\n this.dialog(this.t('previewttl'), (body) => {\r\n const box = document.createElement('div');\r\n box.style.cssText =\r\n 'width:640px;max-width:78vw;max-height:52vh;overflow:auto;border:1px solid #e3e3e3;border-radius:6px;padding:14px;font-family:Helvetica,Arial,sans-serif;font-size:14px';\r\n box.innerHTML = this.ed.innerHTML;\r\n body.appendChild(box);\r\n });\r\n }\r\n\r\n /** Two-pane picker shared by the special-character map and the emoji map:\r\n * fixed category tabs on the left, the active category's glyphs on the right. */\r\n private glyphPickerDlg(title: string, cats: GlyphCategory[], emoji: boolean): void {\r\n this.saveSel();\r\n this.dialog(title, (body) => {\r\n const wrap = document.createElement('div');\r\n wrap.className = 'chmap';\r\n const tabs = document.createElement('div');\r\n tabs.className = 'chtabs';\r\n const panel = document.createElement('div');\r\n panel.className = 'chpanel';\r\n const grid = document.createElement('div');\r\n grid.className = 'chgrid' + (emoji ? ' emgrid' : '');\r\n panel.appendChild(grid);\r\n const show = (i: number) => {\r\n tabs.querySelectorAll('button').forEach((b, bi) => b.classList.toggle('on', bi === i));\r\n grid.innerHTML = '';\r\n cats[i].chars.forEach((ch) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = ch;\r\n b.onclick = () => {\r\n this.closeDlg();\r\n this.exec('insertText', ch);\r\n };\r\n grid.appendChild(b);\r\n });\r\n panel.scrollTop = 0;\r\n };\r\n cats.forEach((c, i) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = this.t(c.key as keyof I18nStrings);\r\n b.addEventListener('click', () => show(i));\r\n tabs.appendChild(b);\r\n });\r\n wrap.append(tabs, panel);\r\n body.appendChild(wrap);\r\n show(0);\r\n });\r\n }\r\n\r\n private charMap(): void {\r\n this.glyphPickerDlg(this.t('charmap').replace('…', ''), CHAR_CATEGORIES, false);\r\n }\r\n\r\n private emojiMap(): void {\r\n this.glyphPickerDlg(this.t('emoji').replace('…', ''), EMOJI_CATEGORIES, true);\r\n }\r\n\r\n private printDoc(): void {\r\n const w = window.open('', '_blank');\r\n if (!w) return;\r\n w.document.write(\r\n `<html dir=\"${this.dir()}\"><body style=\"font-family:Helvetica,Arial,sans-serif;font-size:14px\">${this.ed.innerHTML}</body></html>`\r\n );\r\n w.document.close();\r\n w.focus();\r\n w.print();\r\n }\r\n\r\n private pickImage(): void {\r\n this.imgInput.value = '';\r\n this.imgInput.click();\r\n }\r\n\r\n /* ---------------------------------------------- image upload placeholder */\r\n private imgPhHTML(id?: string): string {\r\n return `<div class=\"img-ph\"${id ? ` id=\"${id}\"` : ''} contenteditable=\"false\">${IC.image}<span>${this.t('dropimage')}</span></div>`;\r\n }\r\n\r\n private insertImagePlaceholder(): void {\r\n this.restoreSel();\r\n const id = 'img-ph-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\r\n document.execCommand('insertHTML', false, this.imgPhHTML(id));\r\n const ph = this.ed.querySelector('#' + id) as HTMLElement | null;\r\n if (ph) {\r\n ph.removeAttribute('id');\r\n this.selectImgPlaceholder(ph);\r\n }\r\n this.onChange();\r\n }\r\n\r\n private clearImgPlaceholderSel(): void {\r\n this.phCtx?.remove();\r\n this.phCtx = null;\r\n this.phActive?.classList.remove('active');\r\n this.phActive = null;\r\n }\r\n\r\n private removeImgPlaceholder(): void {\r\n const ph = this.phActive;\r\n if (!ph) return;\r\n this.clearImgPlaceholderSel();\r\n /* the placeholder inside a template block IS the media slot — deleting\r\n it drops the slot entirely, leaving a text-only block */\r\n (ph.closest('.tpl-media') || ph).remove();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private selectImgPlaceholder(ph: HTMLElement): void {\r\n if (this.phActive === ph) return;\r\n this.clearImgPlaceholderSel();\r\n this.phActive = ph;\r\n ph.classList.add('active');\r\n this.phCtx = document.createElement('div');\r\n this.phCtx.className = 'imgctx img-ph-ctx';\r\n this.phCtx.dir = this.dir();\r\n document.body.appendChild(this.phCtx);\r\n this.renderPhCtxButtons();\r\n }\r\n\r\n private renderPhCtxButtons(): void {\r\n const el = this.phCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n el.append(\r\n this.ctxBtn(IC.uploadic, this.t('uploadimg'), () => {\r\n this.phUploadTarget = this.phActive;\r\n this.pickImage();\r\n }),\r\n this.ctxBtn(IC.link, this.t('imagelink'), () => this.renderPhCtxUrlInput())\r\n );\r\n /* a template's media slot is image-first, but can host a video instead */\r\n if (this.phActive?.closest('.tpl-media')) {\r\n el.append(this.ctxBtn(IC.video, this.t('quickvideo'), () => this.swapPlaceholderKind('video')));\r\n }\r\n el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deleteimg'), () => this.removeImgPlaceholder()));\r\n this.positionImgPhCtx();\r\n }\r\n\r\n /** Swaps a template slot's placeholder between image and video kinds, so the\r\n * same media slot can be filled with either. */\r\n private swapPlaceholderKind(to: 'image' | 'video'): void {\r\n const ph = to === 'video' ? this.phActive : this.vphActive;\r\n if (!ph) return;\r\n const tmp = document.createElement('div');\r\n tmp.innerHTML = to === 'video' ? this.vidPhHTML() : this.imgPhHTML();\r\n const next = tmp.firstElementChild as HTMLElement;\r\n if (to === 'video') this.clearImgPlaceholderSel();\r\n else this.clearVphPlaceholderSel();\r\n ph.replaceWith(next);\r\n if (to === 'video') this.selectVphPlaceholder(next);\r\n else this.selectImgPlaceholder(next);\r\n this.onChange();\r\n }\r\n\r\n private renderPhCtxUrlInput(): void {\r\n const el = this.phCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n const inp = document.createElement('input');\r\n inp.type = 'url';\r\n inp.className = 'urlinp';\r\n inp.placeholder = this.t('imageurlph');\r\n const ok = document.createElement('button');\r\n ok.type = 'button';\r\n ok.className = 'txtbtn';\r\n ok.textContent = this.t('insertimg');\r\n const submit = () => {\r\n const url = inp.value.trim();\r\n const ph = this.phActive;\r\n if (!ph) return;\r\n if (!/^(https?:|data:image\\/|blob:)/i.test(url)) {\r\n inp.classList.add('err');\r\n inp.focus();\r\n return;\r\n }\r\n ok.disabled = true;\r\n inp.disabled = true;\r\n /* only place the image once the URL actually loads, so the user\r\n gets a working preview instead of a broken-image icon */\r\n const probe = new Image();\r\n probe.onload = () => this.replacePlaceholderWithImage(ph, url, '');\r\n probe.onerror = () => {\r\n ok.disabled = false;\r\n inp.disabled = false;\r\n inp.classList.add('err');\r\n inp.focus();\r\n };\r\n probe.src = url;\r\n };\r\n ok.addEventListener('click', submit);\r\n inp.addEventListener('input', () => inp.classList.remove('err'));\r\n inp.addEventListener('keydown', (e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n submit();\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n this.renderPhCtxButtons();\r\n }\r\n });\r\n el.append(inp, ok);\r\n this.positionImgPhCtx();\r\n inp.focus();\r\n }\r\n\r\n private readImageFileInto(file: File, ph: HTMLElement): void {\r\n if (ph.classList.contains('uploading')) return;\r\n if (this.imageUploadHandler) {\r\n this.uploadImageFile(file, ph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n if (this.ed.contains(ph)) this.replacePlaceholderWithImage(ph, fr.result as string, file.name.replace(/\"/g, ''));\r\n };\r\n fr.readAsDataURL(file);\r\n }\r\n\r\n /** Runs the host-supplied imageUploadHandler instead of inlining base64,\r\n * so apps can route the file to S3 / Azure Blob / their own server. */\r\n private uploadImageFile(file: File, ph: HTMLElement): void {\r\n const title = file.name.replace(/\"/g, '');\r\n ph.classList.remove('upload-error');\r\n ph.classList.add('uploading');\r\n const span = ph.querySelector('span');\r\n if (span) span.textContent = this.t('uploading');\r\n this.imageUploadHandler!(file)\r\n .then((url) => {\r\n if (!this.ed.contains(ph)) return;\r\n this.replacePlaceholderWithImage(ph, url, title);\r\n })\r\n .catch((err) => {\r\n if (!this.ed.contains(ph)) return;\r\n ph.classList.remove('uploading');\r\n ph.classList.add('upload-error');\r\n if (span) span.textContent = this.t('uploadfailed');\r\n this.onImageUploadError?.(err, file);\r\n });\r\n }\r\n\r\n private replacePlaceholderWithImage(ph: HTMLElement, src: string, title: string): void {\r\n const img = document.createElement('img');\r\n img.src = src;\r\n img.alt = '';\r\n if (title) img.title = title;\r\n ph.replaceWith(img);\r\n if (this.phActive === ph) this.clearImgPlaceholderSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private positionImgPhCtx(): void {\r\n if (this.phActive && !document.body.contains(this.phActive)) {\r\n this.clearImgPlaceholderSel();\r\n return;\r\n }\r\n if (!this.phActive || !this.phCtx) return;\r\n const r = this.phActive.getBoundingClientRect();\r\n const cw = this.phCtx.offsetWidth;\r\n const ch = this.phCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.bottom + scrollY + 8;\r\n if (r.bottom + 8 + ch > innerHeight - 4) cy = Math.max(this.ctxMinTop(), r.top + scrollY - ch - 8);\r\n this.phCtx.style.left = cx + 'px';\r\n this.phCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- video upload placeholder */\r\n private pickVideo(): void {\r\n this.vidInput.value = '';\r\n this.vidInput.click();\r\n }\r\n\r\n private vidPhHTML(id?: string): string {\r\n return `<div class=\"img-ph vid-ph\"${id ? ` id=\"${id}\"` : ''} contenteditable=\"false\">${IC.video}<span>${this.t('dropvideo')}</span></div>`;\r\n }\r\n\r\n private insertVideoPlaceholder(): void {\r\n this.restoreSel();\r\n const id = 'vid-ph-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\r\n document.execCommand('insertHTML', false, this.vidPhHTML(id));\r\n const ph = this.ed.querySelector('#' + id) as HTMLElement | null;\r\n if (ph) {\r\n ph.removeAttribute('id');\r\n this.selectVphPlaceholder(ph);\r\n }\r\n this.onChange();\r\n }\r\n\r\n private clearVphPlaceholderSel(): void {\r\n this.vphCtx?.remove();\r\n this.vphCtx = null;\r\n this.vphActive?.classList.remove('active');\r\n this.vphActive = null;\r\n }\r\n\r\n private removeVphPlaceholder(): void {\r\n const ph = this.vphActive;\r\n if (!ph) return;\r\n this.clearVphPlaceholderSel();\r\n /* like the image variant: a placeholder inside a template block IS the\r\n media slot — deleting it drops the slot, leaving a text-only block */\r\n (ph.closest('.tpl-media') || ph).remove();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private selectVphPlaceholder(ph: HTMLElement): void {\r\n if (this.vphActive === ph) return;\r\n this.clearVphPlaceholderSel();\r\n this.vphActive = ph;\r\n ph.classList.add('active');\r\n this.vphCtx = document.createElement('div');\r\n this.vphCtx.className = 'imgctx img-ph-ctx';\r\n this.vphCtx.dir = this.dir();\r\n document.body.appendChild(this.vphCtx);\r\n this.renderVphCtxButtons();\r\n }\r\n\r\n private renderVphCtxButtons(): void {\r\n const el = this.vphCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n el.append(\r\n this.ctxBtn(IC.uploadic, this.t('uploadvideo'), () => {\r\n this.vphUploadTarget = this.vphActive;\r\n this.pickVideo();\r\n }),\r\n this.ctxBtn(IC.link, this.t('videolink'), () => this.renderVphCtxUrlInput())\r\n );\r\n /* inside a template slot, offer switching the slot back to an image */\r\n if (this.vphActive?.closest('.tpl-media')) {\r\n el.append(this.ctxBtn(IC.image, this.t('quickimage'), () => this.swapPlaceholderKind('image')));\r\n }\r\n el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deletevideo'), () => this.removeVphPlaceholder()));\r\n this.positionVphCtx();\r\n }\r\n\r\n private renderVphCtxUrlInput(): void {\r\n const el = this.vphCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n const inp = document.createElement('input');\r\n inp.type = 'url';\r\n inp.className = 'urlinp';\r\n inp.placeholder = this.t('videourlph');\r\n const ok = document.createElement('button');\r\n ok.type = 'button';\r\n ok.className = 'txtbtn';\r\n ok.textContent = this.t('insertvideo');\r\n const submit = () => {\r\n const url = inp.value.trim();\r\n const ph = this.vphActive;\r\n if (!ph) return;\r\n if (!/^(https?:|data:video\\/|blob:)/i.test(url)) {\r\n inp.classList.add('err');\r\n inp.focus();\r\n return;\r\n }\r\n /* a page URL from a known video host can't play in a <video> tag —\r\n swap in the host's iframe player instead of probing it */\r\n const embed = this.videoEmbedUrl(url);\r\n if (embed) {\r\n this.replacePlaceholderWithEmbed(ph, embed);\r\n return;\r\n }\r\n ok.disabled = true;\r\n inp.disabled = true;\r\n /* only place the video once its metadata actually loads, so the user\r\n gets a working preview instead of a broken player */\r\n const probe = document.createElement('video');\r\n probe.preload = 'metadata';\r\n probe.onloadedmetadata = () => this.replacePlaceholderWithVideo(ph, url, '');\r\n probe.onerror = () => {\r\n ok.disabled = false;\r\n inp.disabled = false;\r\n inp.classList.add('err');\r\n inp.focus();\r\n };\r\n probe.src = url;\r\n };\r\n ok.addEventListener('click', submit);\r\n inp.addEventListener('input', () => inp.classList.remove('err'));\r\n inp.addEventListener('keydown', (e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n submit();\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n this.renderVphCtxButtons();\r\n }\r\n });\r\n el.append(inp, ok);\r\n this.positionVphCtx();\r\n inp.focus();\r\n }\r\n\r\n private readVideoFileInto(file: File, ph: HTMLElement): void {\r\n if (ph.classList.contains('uploading')) return;\r\n if (this.videoUploadHandler) {\r\n this.uploadVideoFile(file, ph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n if (this.ed.contains(ph)) this.replacePlaceholderWithVideo(ph, fr.result as string, file.name.replace(/\"/g, ''));\r\n };\r\n fr.readAsDataURL(file);\r\n }\r\n\r\n /** Runs the host-supplied videoUploadHandler instead of inlining base64,\r\n * so apps can route the file to S3 / Azure Blob / their own server. */\r\n private uploadVideoFile(file: File, ph: HTMLElement): void {\r\n const title = file.name.replace(/\"/g, '');\r\n ph.classList.remove('upload-error');\r\n ph.classList.add('uploading');\r\n const span = ph.querySelector('span');\r\n if (span) span.textContent = this.t('uploading');\r\n this.videoUploadHandler!(file)\r\n .then((url) => {\r\n if (!this.ed.contains(ph)) return;\r\n this.replacePlaceholderWithVideo(ph, url, title);\r\n })\r\n .catch((err) => {\r\n if (!this.ed.contains(ph)) return;\r\n ph.classList.remove('uploading');\r\n ph.classList.add('upload-error');\r\n if (span) span.textContent = this.t('uploadfailed');\r\n this.onVideoUploadError?.(err, file);\r\n });\r\n }\r\n\r\n private replacePlaceholderWithVideo(ph: HTMLElement, src: string, title: string): void {\r\n const vid = document.createElement('video');\r\n vid.controls = true;\r\n vid.src = src;\r\n if (title) vid.title = title;\r\n ph.replaceWith(vid);\r\n if (this.vphActive === ph) this.clearVphPlaceholderSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n /** Swaps a video placeholder for a hosted player iframe (YouTube & co.). */\r\n private replacePlaceholderWithEmbed(ph: HTMLElement, embedUrl: string): void {\r\n const tmp = document.createElement('div');\r\n tmp.innerHTML = this.videoEmbedHTML(embedUrl);\r\n ph.replaceWith(tmp.firstElementChild as HTMLElement);\r\n if (this.vphActive === ph) this.clearVphPlaceholderSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private positionVphCtx(): void {\r\n if (this.vphActive && !document.body.contains(this.vphActive)) {\r\n this.clearVphPlaceholderSel();\r\n return;\r\n }\r\n if (!this.vphActive || !this.vphCtx) return;\r\n const r = this.vphActive.getBoundingClientRect();\r\n const cw = this.vphCtx.offsetWidth;\r\n const ch = this.vphCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.bottom + scrollY + 8;\r\n if (r.bottom + 8 + ch > innerHeight - 4) cy = Math.max(this.ctxMinTop(), r.top + scrollY - ch - 8);\r\n this.vphCtx.style.left = cx + 'px';\r\n this.vphCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- video toolbar (post-insert) */\r\n private cancelVidHide(): void {\r\n if (this.vidHideTimer != null) {\r\n window.clearTimeout(this.vidHideTimer);\r\n this.vidHideTimer = null;\r\n }\r\n }\r\n\r\n private clearVidHandles(): void {\r\n this.cancelVidHide();\r\n this.vidCtx?.remove();\r\n this.vidCtx = null;\r\n this.vidActive?.classList.remove('vid-selected');\r\n this.vidActive = null;\r\n }\r\n\r\n private selectVideo(vid: HTMLElement): void {\r\n if (this.vidActive === vid) return;\r\n this.clearVidHandles();\r\n this.vidActive = vid;\r\n vid.classList.add('vid-selected');\r\n this.vidCtx = this.buildVideoCtxToolbar(vid);\r\n this.positionVidCtx();\r\n }\r\n\r\n private buildVideoCtxToolbar(vid: HTMLElement): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'imgctx';\r\n el.dir = this.dir();\r\n const rebuild = () => {\r\n const rebuilt = this.buildVideoCtxToolbar(vid);\r\n this.vidCtx?.replaceWith(rebuilt);\r\n this.vidCtx = rebuilt;\r\n this.positionVidCtx();\r\n };\r\n const align = (a: 'left' | 'center' | 'right') => {\r\n this.setVideoAlign(vid, a);\r\n rebuild();\r\n };\r\n const isLeft = vid.style.float === 'left';\r\n const isRight = vid.style.float === 'right';\r\n const isCenter = !isLeft && !isRight && vid.style.marginLeft === 'auto' && vid.style.marginRight === 'auto';\r\n const mkBtn = (icon: string, tip: string, on: boolean, fn: () => void) => {\r\n const b = this.ctxBtn(icon, tip, fn);\r\n b.classList.toggle('on', on);\r\n return b;\r\n };\r\n el.append(\r\n mkBtn(IC.alignleft, this.t('alignleft'), isLeft, () => align('left')),\r\n mkBtn(IC.aligncenter, this.t('aligncenter'), isCenter, () => align('center')),\r\n mkBtn(IC.alignright, this.t('alignright'), isRight, () => align('right')),\r\n this.ctxSep(),\r\n mkBtn(IC.trash, this.t('deletevideo'), false, () => {\r\n vid.remove();\r\n this.clearVidHandles();\r\n this.onChange();\r\n })\r\n );\r\n el.addEventListener('mousedown', (e) => e.preventDefault());\r\n el.addEventListener('mouseenter', () => this.cancelVidHide());\r\n el.addEventListener('mouseleave', () => {\r\n this.cancelVidHide();\r\n this.vidHideTimer = window.setTimeout(() => this.clearVidHandles(), 250);\r\n });\r\n document.body.appendChild(el);\r\n return el;\r\n }\r\n\r\n private setVideoAlign(vid: HTMLElement, align: 'left' | 'center' | 'right'): void {\r\n vid.style.float = '';\r\n vid.style.display = '';\r\n vid.style.marginLeft = '';\r\n vid.style.marginRight = '';\r\n vid.style.marginBottom = '';\r\n if (align === 'left') {\r\n vid.style.float = 'left';\r\n vid.style.marginInlineEnd = '1em';\r\n vid.style.marginBottom = '0.5em';\r\n } else if (align === 'right') {\r\n vid.style.float = 'right';\r\n vid.style.marginInlineStart = '1em';\r\n vid.style.marginBottom = '0.5em';\r\n } else {\r\n vid.style.display = 'block';\r\n vid.style.marginLeft = 'auto';\r\n vid.style.marginRight = 'auto';\r\n }\r\n this.onChange();\r\n }\r\n\r\n private positionVidCtx(): void {\r\n if (!this.vidActive || !document.body.contains(this.vidActive)) {\r\n this.clearVidHandles();\r\n return;\r\n }\r\n const r = this.vidActive.getBoundingClientRect();\r\n if (!this.vidCtx) return;\r\n const cw = this.vidCtx.offsetWidth;\r\n const ch = this.vidCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.top + scrollY - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\r\n this.vidCtx.style.left = cx + 'px';\r\n this.vidCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- video dialog / embeds */\r\n /** Maps a page URL from a known video host to its iframe player URL. Returns\r\n * null for anything else (e.g. direct .mp4 file URLs). */\r\n private videoEmbedUrl(url: string): string | null {\r\n let m = url.match(/^https?:\\/\\/(?:www\\.|m\\.)?youtube\\.com\\/watch\\?(?:[^\\s#]*[?&])?v=([\\w-]{5,})/i);\r\n if (!m) m = url.match(/^https?:\\/\\/(?:www\\.)?(?:youtu\\.be|youtube\\.com\\/(?:embed|shorts|live))\\/([\\w-]{5,})/i);\r\n if (m) return 'https://www.youtube.com/embed/' + m[1];\r\n m = url.match(/^https?:\\/\\/(?:www\\.)?vimeo\\.com\\/(\\d+)/i);\r\n if (m) return 'https://player.vimeo.com/video/' + m[1];\r\n m = url.match(/^https?:\\/\\/(?:www\\.)?dailymotion\\.com\\/video\\/(\\w+)/i);\r\n if (m) return 'https://www.dailymotion.com/embed/video/' + m[1];\r\n return null;\r\n }\r\n\r\n private videoEmbedHTML(src: string, w = 560, h = 314): string {\r\n return `<span class=\"video-embed\" contenteditable=\"false\"><iframe src=\"${src}\" width=\"${w}\" height=\"${h}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></span>`;\r\n }\r\n\r\n /** Insert/edit-video dialog with General (source/width/height), Embed (embed\r\n * code) and Advanced (alternative source, poster image) tabs. Hosted page\r\n * URLs (YouTube & co.) become iframe players; anything else becomes a\r\n * <video> tag. The General tab also offers the same upload path as before\r\n * (videoUploadHandler when configured, else inline base64). */\r\n private videoDlg(): void {\r\n this.saveSel();\r\n let srcInp: HTMLInputElement;\r\n let wInp: HTMLInputElement;\r\n let hInp: HTMLInputElement;\r\n let embedTa: HTMLTextAreaElement;\r\n let altInp: HTMLInputElement;\r\n let posterInp: HTMLInputElement;\r\n const field = (labelKey: keyof I18nStrings, input: HTMLElement): HTMLElement => {\r\n const f = document.createElement('div');\r\n f.className = 'dfield';\r\n const l = document.createElement('label');\r\n l.textContent = this.t(labelKey);\r\n f.append(l, input);\r\n return f;\r\n };\r\n const urlInput = (): HTMLInputElement => {\r\n const i = document.createElement('input');\r\n i.type = 'url';\r\n return i;\r\n };\r\n this.dialog(\r\n this.t('videodlgttl'),\r\n (body) => {\r\n const tabs = document.createElement('div');\r\n tabs.className = 'dtabs';\r\n const panels: HTMLElement[] = [];\r\n const mkTab = (labelKey: keyof I18nStrings, build: (p: HTMLElement) => void) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = this.t(labelKey);\r\n const p = document.createElement('div');\r\n p.className = 'dtabpanel';\r\n build(p);\r\n const i = panels.length;\r\n panels.push(p);\r\n b.addEventListener('click', () => show(i));\r\n tabs.appendChild(b);\r\n };\r\n const show = (i: number) => {\r\n tabs.querySelectorAll('button').forEach((x, xi) => x.classList.toggle('on', xi === i));\r\n panels.forEach((x, xi) => (x.style.display = xi === i ? '' : 'none'));\r\n };\r\n mkTab('vidgeneral', (p) => {\r\n srcInp = urlInput();\r\n srcInp.placeholder = this.t('videourlph');\r\n const srcRow = document.createElement('div');\r\n srcRow.className = 'drow';\r\n const upBtn = document.createElement('button');\r\n upBtn.type = 'button';\r\n upBtn.className = 'txtbtn';\r\n upBtn.textContent = this.t('uploadvideo');\r\n const file = document.createElement('input');\r\n file.type = 'file';\r\n file.accept = this.options.videoFileTypes.join(',');\r\n file.style.display = 'none';\r\n upBtn.addEventListener('click', () => {\r\n file.value = '';\r\n file.click();\r\n });\r\n file.addEventListener('change', () => {\r\n const f = file.files?.[0];\r\n if (!f) return;\r\n upBtn.disabled = true;\r\n upBtn.textContent = this.t('uploading');\r\n const done = (url: string) => {\r\n srcInp.value = url;\r\n upBtn.disabled = false;\r\n upBtn.textContent = this.t('uploadvideo');\r\n };\r\n if (this.videoUploadHandler) {\r\n this.videoUploadHandler(f)\r\n .then(done)\r\n .catch((err) => {\r\n upBtn.disabled = false;\r\n upBtn.textContent = this.t('uploadfailed');\r\n this.onVideoUploadError?.(err, f);\r\n });\r\n } else {\r\n const fr = new FileReader();\r\n fr.onload = () => done(fr.result as string);\r\n fr.readAsDataURL(f);\r\n }\r\n });\r\n srcRow.append(srcInp, upBtn, file);\r\n srcInp.style.flex = '1';\r\n p.appendChild(field('vidsource', srcRow));\r\n const dims = document.createElement('div');\r\n dims.className = 'drow';\r\n wInp = document.createElement('input');\r\n wInp.type = 'number';\r\n wInp.value = '560';\r\n hInp = document.createElement('input');\r\n hInp.type = 'number';\r\n hInp.value = '314';\r\n dims.append(field('tblwidth', wInp), field('tblheight', hInp));\r\n p.appendChild(dims);\r\n });\r\n mkTab('vidembed', (p) => {\r\n const hint = document.createElement('p');\r\n hint.textContent = this.t('vidembedhint');\r\n hint.style.cssText = 'margin:0 0 8px;color:#556;font-size:13.5px';\r\n embedTa = document.createElement('textarea');\r\n embedTa.style.cssText = 'width:100%;box-sizing:border-box;height:160px';\r\n p.append(hint, embedTa);\r\n });\r\n mkTab('vidadvanced', (p) => {\r\n altInp = urlInput();\r\n posterInp = urlInput();\r\n p.append(field('vidaltsource', altInp), field('vidposter', posterInp));\r\n });\r\n const wrap = document.createElement('div');\r\n wrap.className = 'dtabbody';\r\n panels.forEach((p) => wrap.appendChild(p));\r\n body.append(tabs, wrap);\r\n show(0);\r\n setTimeout(() => srcInp.focus(), 0);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n const embedCode = embedTa.value.trim();\r\n const src = srcInp.value.trim();\r\n const w = parseInt(wInp.value, 10) || 560;\r\n const h = parseInt(hInp.value, 10) || 314;\r\n this.closeDlg();\r\n if (!embedCode && !src) return;\r\n this.restoreSel();\r\n if (embedCode) {\r\n document.execCommand('insertHTML', false, `<span class=\"video-embed\" contenteditable=\"false\">${embedCode}</span>`);\r\n this.onChange();\r\n return;\r\n }\r\n const embed = this.videoEmbedUrl(src);\r\n if (embed) {\r\n document.execCommand('insertHTML', false, this.videoEmbedHTML(embed, w, h));\r\n } else {\r\n const alt = altInp.value.trim();\r\n const poster = posterInp.value.trim();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<video controls width=\"${w}\" height=\"${h}\"${poster ? ` poster=\"${this.escapeAttr(poster)}\"` : ''}>` +\r\n `<source src=\"${this.escapeAttr(src)}\">${alt ? `<source src=\"${this.escapeAttr(alt)}\">` : ''}</video>`\r\n );\r\n }\r\n this.onChange();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private escapeAttr(s: string): string {\r\n return s.replace(/&/g, '&').replace(/\"/g, '"');\r\n }\r\n\r\n private escHtml(s: string): string {\r\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\r\n }\r\n\r\n /* ---------------------------------------------------------- inline code & code samples */\r\n /** The inline <code> run the caret sits in, if any (code blocks don't count). */\r\n private closestInlineCode(): HTMLElement | null {\r\n const s = window.getSelection();\r\n const node = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\r\n if (!node) return null;\r\n const el = node.nodeType === Node.ELEMENT_NODE ? (node as HTMLElement) : node.parentElement;\r\n const code = el?.closest('code') as HTMLElement | null;\r\n return code && this.ed.contains(code) && !code.closest('pre') ? code : null;\r\n }\r\n\r\n /** Wraps the selection in an inline <code> run, or unwraps the run the caret is\r\n * in. Selections spanning multiple blocks are left alone (a <code> can't wrap\r\n * across paragraphs without producing invalid markup). */\r\n private toggleInlineCode(): void {\r\n this.restoreSel();\r\n const sel = window.getSelection();\r\n if (!sel || !sel.rangeCount) return;\r\n const existing = this.closestInlineCode();\r\n if (existing) {\r\n const first = existing.firstChild;\r\n const last = existing.lastChild;\r\n while (existing.firstChild) existing.parentNode!.insertBefore(existing.firstChild, existing);\r\n existing.remove();\r\n if (first && last) {\r\n const r = document.createRange();\r\n r.setStartBefore(first);\r\n r.setEndAfter(last);\r\n sel.removeAllRanges();\r\n sel.addRange(r);\r\n }\r\n } else {\r\n const range = sel.getRangeAt(0);\r\n if (range.collapsed) return;\r\n if (this.closestBlock(range.startContainer) !== this.closestBlock(range.endContainer)) return;\r\n const code = document.createElement('code');\r\n code.appendChild(range.extractContents());\r\n range.insertNode(code);\r\n const r = document.createRange();\r\n r.selectNodeContents(code);\r\n sel.removeAllRanges();\r\n sel.addRange(r);\r\n }\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n /** Typing `snippet` converts to an inline <code> run the moment the closing\r\n * backtick is typed, so code can be marked up without reaching for the toolbar. */\r\n private tryCodeTyping(e: KeyboardEvent): void {\r\n const sel = window.getSelection();\r\n if (!sel || !sel.isCollapsed || !sel.anchorNode) return;\r\n const node = sel.anchorNode;\r\n if (node.nodeType !== Node.TEXT_NODE || !this.ed.contains(node)) return;\r\n if (node.parentElement?.closest('code, pre')) return;\r\n const before = (node.textContent || '').slice(0, sel.anchorOffset);\r\n const m = before.match(/(?:^|[^`])`([^`]+)$/);\r\n if (!m) return;\r\n const src = m[1];\r\n if (/^\\s|\\s$/.test(src)) return;\r\n e.preventDefault();\r\n const range = document.createRange();\r\n range.setStart(node, sel.anchorOffset - src.length - 1);\r\n range.setEnd(node, sel.anchorOffset);\r\n /* direct DOM instead of execCommand('insertHTML') — with styleWithCSS\r\n active the browser rewrites a pasted <code> into a styled <span>,\r\n losing the semantic tag */\r\n range.deleteContents();\r\n const code = document.createElement('code');\r\n code.textContent = src;\r\n range.insertNode(code);\r\n const after = document.createRange();\r\n after.setStartAfter(code);\r\n after.collapse(true);\r\n sel.removeAllRanges();\r\n sel.addRange(after);\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n /** Custom dropdown for dialog fields (a native <select> popup can't be styled):\r\n * a field-styled button showing the current choice that opens a floating,\r\n * scrollable option list. Read the current choice via `.value()`. */\r\n private dlgSelect(options: [string, string][], selected: string): { el: HTMLElement; value: () => string } {\r\n let value = selected;\r\n const el = document.createElement('div');\r\n el.className = 'dsel';\r\n const btn = document.createElement('button');\r\n btn.type = 'button';\r\n btn.className = 'dsel-btn';\r\n const lbl = document.createElement('span');\r\n lbl.className = 'lbl';\r\n lbl.textContent = options.find(([v]) => v === selected)?.[1] || '';\r\n btn.append(lbl);\r\n btn.insertAdjacentHTML('beforeend', IC.chev);\r\n const list = document.createElement('div');\r\n list.className = 'dsel-list';\r\n options.forEach(([v, label]) => {\r\n const o = document.createElement('button');\r\n o.type = 'button';\r\n o.textContent = label;\r\n o.classList.toggle('on', v === value);\r\n o.addEventListener('click', () => {\r\n value = v;\r\n lbl.textContent = label;\r\n list.querySelectorAll('button').forEach((b) => b.classList.toggle('on', b === o));\r\n el.classList.remove('open');\r\n btn.focus();\r\n });\r\n list.appendChild(o);\r\n });\r\n btn.addEventListener('click', () => {\r\n el.classList.toggle('open');\r\n if (el.classList.contains('open')) (list.querySelector('.on') as HTMLElement | null)?.scrollIntoView({ block: 'nearest' });\r\n });\r\n el.addEventListener('focusout', (e) => {\r\n if (!el.contains((e as FocusEvent).relatedTarget as Node)) el.classList.remove('open');\r\n });\r\n el.addEventListener('keydown', (e) => {\r\n /* Escape closes the open list without closing the whole dialog */\r\n if ((e as KeyboardEvent).key === 'Escape' && el.classList.contains('open')) {\r\n e.stopPropagation();\r\n el.classList.remove('open');\r\n btn.focus();\r\n }\r\n });\r\n el.append(btn, list);\r\n return { el, value: () => value };\r\n }\r\n\r\n /** Insert/edit-code-sample dialog: language dropdown + monospace textarea to\r\n * paste or type code into. Inserts a non-editable <pre class=\"code-block\">\r\n * whose header shows the language; click the block to edit / copy / delete. */\r\n private codeDlg(existing?: HTMLElement): void {\r\n this.saveSel();\r\n let langDd: { el: HTMLElement; value: () => string };\r\n let ta: HTMLTextAreaElement;\r\n this.dialog(\r\n this.t('codedlgttl'),\r\n (body) => {\r\n const f = document.createElement('div');\r\n f.className = 'dfield';\r\n const l = document.createElement('label');\r\n l.textContent = this.t('codelang');\r\n langDd = this.dlgSelect(CODE_LANGS, existing?.dataset.lang || 'plain');\r\n f.append(l, langDd.el);\r\n ta = document.createElement('textarea');\r\n ta.className = 'code-input';\r\n ta.spellcheck = false;\r\n ta.value = existing?.querySelector('code')?.textContent || '';\r\n ta.placeholder = 'const answer = 42;';\r\n body.append(f, ta);\r\n setTimeout(() => ta.focus(), 0);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n const src = ta.value.replace(/\\s+$/, '');\r\n const lang = langDd.value();\r\n const label = CODE_LANGS.find(([v]) => v === lang)?.[1] || lang;\r\n this.closeDlg();\r\n if (!src.trim()) return;\r\n if (existing) {\r\n existing.dataset.lang = lang;\r\n existing.setAttribute('data-lang-label', label);\r\n const codeEl = existing.querySelector('code') || existing;\r\n codeEl.textContent = src;\r\n this.clearCodeSel();\r\n this.onChange();\r\n return;\r\n }\r\n this.restoreSel();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<pre class=\"code-block\" contenteditable=\"false\" data-lang=\"${lang}\" data-lang-label=\"${this.escapeAttr(label)}\">` +\r\n `<code>${this.escHtml(src)}</code></pre><p><br></p>`\r\n );\r\n this.onChange();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private clearCodeSel(): void {\r\n this.codeCtx?.remove();\r\n this.codeCtx = null;\r\n this.codeActive?.classList.remove('code-selected');\r\n this.codeActive = null;\r\n }\r\n\r\n private selectCodeEl(el: HTMLElement): void {\r\n if (this.codeActive === el) return;\r\n this.clearCodeSel();\r\n this.codeActive = el;\r\n el.classList.add('code-selected');\r\n this.codeCtx = this.buildCodeCtxToolbar(el);\r\n this.positionCodeCtx();\r\n }\r\n\r\n private buildCodeCtxToolbar(el: HTMLElement): HTMLElement {\r\n const ctx = document.createElement('div');\r\n ctx.className = 'imgctx';\r\n ctx.dir = this.dir();\r\n ctx.append(\r\n this.ctxBtn(IC.editic, this.t('editcode'), () => this.codeDlg(el)),\r\n this.ctxBtn(IC.copyic, this.t('copycode'), () => this.copyCodeBlock(el)),\r\n this.ctxSep(),\r\n this.ctxBtn(IC.trash, this.t('deletecode'), () => {\r\n el.remove();\r\n this.clearCodeSel();\r\n this.onChange();\r\n })\r\n );\r\n ctx.addEventListener('mousedown', (e) => e.preventDefault());\r\n document.body.appendChild(ctx);\r\n return ctx;\r\n }\r\n\r\n private copyCodeBlock(el: HTMLElement): void {\r\n const text = el.querySelector('code')?.textContent ?? el.textContent ?? '';\r\n if (navigator.clipboard?.writeText) {\r\n navigator.clipboard.writeText(text).catch(() => {});\r\n return;\r\n }\r\n const ta = document.createElement('textarea');\r\n ta.value = text;\r\n document.body.appendChild(ta);\r\n ta.select();\r\n document.execCommand('copy');\r\n ta.remove();\r\n }\r\n\r\n private positionCodeCtx(): void {\r\n if (!this.codeActive || !document.body.contains(this.codeActive)) {\r\n this.clearCodeSel();\r\n return;\r\n }\r\n const r = this.codeActive.getBoundingClientRect();\r\n if (!this.codeCtx) return;\r\n const cw = this.codeCtx.offsetWidth;\r\n const ch = this.codeCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.top + scrollY - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\r\n this.codeCtx.style.left = cx + 'px';\r\n this.codeCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- templates */\r\n private templateMenu(anchor: HTMLElement): void {\r\n this.popup(anchor, (el) => this.buildTemplatePickInto(el));\r\n }\r\n\r\n /** Miniature div-based mockup of a layout, mirroring what the block looks\r\n like in the editor: grey box = image slot, bars = heading/paragraph. */\r\n private tplPreviewHTML(layout: TplLayout): string {\r\n const img = '<span class=\"pv-img\"></span>';\r\n const head = '<span class=\"pv-h\"></span>';\r\n const line = (w: number) => `<span class=\"pv-l\" style=\"width:${w}%\"></span>`;\r\n const col = (inner: string) => `<span class=\"pv-col\">${inner}</span>`;\r\n const row = (inner: string) => `<span class=\"pv-row\">${inner}</span>`;\r\n const textCol = col(head + line(100) + line(88));\r\n if (layout === 'img-left')\r\n return `<span class=\"pv\">${row(img + textCol)}${line(100)}${line(72)}</span>`;\r\n if (layout === 'img-right')\r\n return `<span class=\"pv\">${row(textCol + img)}${line(100)}${line(72)}</span>`;\r\n if (layout === 'img-top')\r\n return `<span class=\"pv pv-c\">${img}${head}${line(100)}${line(72)}</span>`;\r\n return `<span class=\"pv pv-c\">${head}${line(100)}${line(72)}${img}</span>`;\r\n }\r\n\r\n private buildTemplatePickInto(el: HTMLElement, after?: () => void): void {\r\n const wrap = document.createElement('div');\r\n wrap.className = 'tplpick';\r\n TPL_LAYOUTS.forEach((layout) => {\r\n const tile = document.createElement('button');\r\n tile.type = 'button';\r\n tile.className = 'tpltile';\r\n tile.title = this.t(TPL_LABEL[layout]);\r\n tile.innerHTML = this.tplPreviewHTML(layout) + `<span class=\"tpllbl\">${this.t(TPL_LABEL[layout])}</span>`;\r\n tile.addEventListener('click', () => {\r\n this.closePop();\r\n this.insertTemplate(layout);\r\n after?.();\r\n });\r\n wrap.appendChild(tile);\r\n });\r\n el.appendChild(wrap);\r\n }\r\n\r\n private insertTemplate(layout: TplLayout): void {\r\n this.restoreSel();\r\n const media = `<div class=\"tpl-media\" contenteditable=\"false\">${this.imgPhHTML()}</div>`;\r\n const text = `<div class=\"tpl-text\"><h2>${this.t('heading')}</h2><p>${this.t('para')}</p></div>`;\r\n /* text-above-image layout keeps DOM order = visual order so the caret\r\n travels naturally; every other layout has the media slot first */\r\n const inner = layout === 'img-center' ? text + media : media + text;\r\n document.execCommand('insertHTML', false, `<div class=\"tpl tpl-${layout}\">${inner}</div><p><br></p>`);\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private clearTplSel(): void {\r\n this.tplCtx?.remove();\r\n this.tplCtx = null;\r\n this.tplActive?.classList.remove('tpl-selected');\r\n this.tplActive = null;\r\n }\r\n\r\n private selectTemplate(tpl: HTMLElement): void {\r\n if (this.tplActive === tpl) return;\r\n this.clearTplSel();\r\n this.tplActive = tpl;\r\n tpl.classList.add('tpl-selected');\r\n this.tplCtx = document.createElement('div');\r\n this.tplCtx.className = 'imgctx tplctx';\r\n this.tplCtx.dir = this.dir();\r\n document.body.appendChild(this.tplCtx);\r\n this.renderTplCtxButtons();\r\n }\r\n\r\n private renderTplCtxButtons(): void {\r\n const el = this.tplCtx;\r\n const tpl = this.tplActive;\r\n if (!el || !tpl) return;\r\n el.innerHTML = '';\r\n TPL_LAYOUTS.forEach((layout) => {\r\n const b = this.ctxBtn(TPL_ICON[layout], this.t(TPL_LABEL[layout]), () => this.setTplLayout(layout));\r\n b.classList.toggle('on', tpl.classList.contains('tpl-' + layout));\r\n el.appendChild(b);\r\n });\r\n el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deltemplate'), () => this.removeTemplate()));\r\n this.positionTplCtx();\r\n }\r\n\r\n private setTplLayout(layout: TplLayout): void {\r\n const tpl = this.tplActive;\r\n if (!tpl) return;\r\n TPL_LAYOUTS.forEach((l) => tpl.classList.remove('tpl-' + l));\r\n tpl.classList.add('tpl-' + layout);\r\n /* keep DOM order = visual order (see insertTemplate) */\r\n const media = tpl.querySelector(':scope > .tpl-media');\r\n const text = tpl.querySelector(':scope > .tpl-text');\r\n if (media && text) {\r\n if (layout === 'img-center') tpl.appendChild(media);\r\n else tpl.insertBefore(media, text);\r\n }\r\n this.renderTplCtxButtons();\r\n this.positionImgPhCtx();\r\n this.positionImageHandles();\r\n this.onChange();\r\n }\r\n\r\n private removeTemplate(): void {\r\n const tpl = this.tplActive;\r\n if (!tpl) return;\r\n this.clearTplSel();\r\n if (this.phActive && tpl.contains(this.phActive)) this.clearImgPlaceholderSel();\r\n if (this.imgActive && tpl.contains(this.imgActive)) this.clearImageHandles();\r\n tpl.remove();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private positionTplCtx(): void {\r\n if (this.tplActive && !document.body.contains(this.tplActive)) {\r\n this.clearTplSel();\r\n return;\r\n }\r\n if (!this.tplActive || !this.tplCtx) return;\r\n const r = this.tplActive.getBoundingClientRect();\r\n const cw = this.tplCtx.offsetWidth;\r\n const ch = this.tplCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.top + scrollY - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\r\n this.tplCtx.style.left = cx + 'px';\r\n this.tplCtx.style.top = cy + 'px';\r\n }\r\n\r\n private pickWordDoc(): void {\r\n this.docInput.value = '';\r\n this.docInput.click();\r\n }\r\n\r\n /* ---------------------------------------------------------- fullscreen */\r\n private toggleFullscreen(): void {\r\n this.shell.classList.toggle('fullscreen');\r\n const b = this.toolbar.querySelector('[data-id=fullscreen]') as HTMLElement | null;\r\n b?.classList.toggle('on', this.shell.classList.contains('fullscreen'));\r\n this.positionTableHandles();\r\n }\r\n\r\n /* ---------------------------------------------------------- table resize */\r\n private clearTableHandles(): void {\r\n this.tblCorner?.remove();\r\n this.tblCorner = null;\r\n this.tblColBars.forEach((b) => b.remove());\r\n this.tblColBars = [];\r\n this.tblCtx?.remove();\r\n this.tblCtx = null;\r\n this.tblCellMark?.remove();\r\n this.tblCellMark = null;\r\n this.tblOpMark?.remove();\r\n this.tblOpMark = null;\r\n this.tblOpMarkKind = null;\r\n this.tblActive?.classList.remove('tbl-selected');\r\n this.tblActive = null;\r\n }\r\n\r\n /** Blue outline around the cell that holds the caret, so it is clear\r\n which cell / row / column the table operations will target. */\r\n private positionCellMarker(): void {\r\n if (!this.tblCellMark) return;\r\n const cell = this.currentCell();\r\n if (!cell || !this.tblActive || cell.closest('table') !== this.tblActive) {\r\n this.tblCellMark.style.display = 'none';\r\n return;\r\n }\r\n const r = cell.getBoundingClientRect();\r\n this.tblCellMark.style.display = 'block';\r\n this.tblCellMark.style.left = r.left + scrollX + 'px';\r\n this.tblCellMark.style.top = r.top + scrollY + 'px';\r\n this.tblCellMark.style.width = r.width + 'px';\r\n this.tblCellMark.style.height = r.height + 'px';\r\n }\r\n\r\n /** Dashed highlight over the whole row / column an operation targets,\r\n shown while its button or menu item is hovered. */\r\n private setOpTarget(kind: 'row' | 'col' | null): void {\r\n this.tblOpMarkKind = kind;\r\n this.positionOpMark();\r\n }\r\n\r\n private positionOpMark(): void {\r\n const kind = this.tblOpMarkKind;\r\n const cell = kind ? this.currentCell() : null;\r\n if (!kind || !cell || !this.tblActive || cell.closest('table') !== this.tblActive) {\r\n this.tblOpMark?.remove();\r\n this.tblOpMark = null;\r\n return;\r\n }\r\n if (!this.tblOpMark) {\r\n this.tblOpMark = document.createElement('div');\r\n this.tblOpMark.className = 'tbl-opmark';\r\n document.body.appendChild(this.tblOpMark);\r\n }\r\n const tr = this.tblActive.getBoundingClientRect();\r\n const cr = cell.getBoundingClientRect();\r\n const rr = (cell.parentElement as HTMLElement).getBoundingClientRect();\r\n const left = kind === 'row' ? rr.left : cr.left;\r\n const top = kind === 'row' ? rr.top : tr.top;\r\n const width = kind === 'row' ? rr.width : cr.width;\r\n const height = kind === 'row' ? rr.height : tr.height;\r\n this.tblOpMark.style.left = left + scrollX + 'px';\r\n this.tblOpMark.style.top = top + scrollY + 'px';\r\n this.tblOpMark.style.width = width + 'px';\r\n this.tblOpMark.style.height = height + 'px';\r\n }\r\n\r\n /** Lowest allowed top for floating context toolbars — keeps them from\r\n covering the editor menubar/toolbar when the target sits on the first line. */\r\n private ctxMinTop(): number {\r\n return Math.max(scrollY + 4, this.ed.getBoundingClientRect().top + scrollY - 2);\r\n }\r\n\r\n private ctxBtn(icon: string, tip: string, fn: () => void, id?: string): HTMLButtonElement {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.title = tip;\r\n b.innerHTML = icon;\r\n if (id) b.dataset.id = id;\r\n b.addEventListener('mousedown', (e) => e.preventDefault());\r\n b.addEventListener('click', fn);\r\n return b;\r\n }\r\n\r\n private ctxSep(): HTMLElement {\r\n const s = document.createElement('div');\r\n s.className = 'sep';\r\n return s;\r\n }\r\n\r\n private buildTableCtxToolbar(): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'tblctx';\r\n el.dir = this.dir();\r\n /* hovering a row/column button highlights the row/column it targets */\r\n const hl = (b: HTMLButtonElement, kind: 'row' | 'col'): HTMLButtonElement => {\r\n b.addEventListener('mouseenter', () => this.setOpTarget(kind));\r\n b.addEventListener('mouseleave', () => this.setOpTarget(null));\r\n return b;\r\n };\r\n const fillBtn = this.ctxBtn(IC.palette, this.t('cellbg'), () => this.cellFillMenu(fillBtn));\r\n el.append(\r\n hl(this.ctxBtn(IC.rowbefore, this.t('rowabove'), () => this.tableOp('rowabove')), 'row'),\r\n hl(this.ctxBtn(IC.rowafter, this.t('rowbelow'), () => this.tableOp('rowbelow')), 'row'),\r\n hl(this.ctxBtn(IC.moverowup, this.t('moverowup'), () => this.tableMove('rowup')), 'row'),\r\n hl(this.ctxBtn(IC.moverowdown, this.t('moverowdown'), () => this.tableMove('rowdown')), 'row'),\r\n hl(this.ctxBtn(IC.rowdelete, this.t('delrow'), () => this.tableOp('delrow')), 'row'),\r\n this.ctxSep(),\r\n hl(this.ctxBtn(IC.colbefore, this.t('colbefore'), () => this.tableOp('colbefore')), 'col'),\r\n hl(this.ctxBtn(IC.colafter, this.t('colafter'), () => this.tableOp('colafter')), 'col'),\r\n hl(this.ctxBtn(IC.movecolleft, this.t('movecolleft'), () => this.tableMove('colleft')), 'col'),\r\n hl(this.ctxBtn(IC.movecolright, this.t('movecolright'), () => this.tableMove('colright')), 'col'),\r\n hl(this.ctxBtn(IC.coldelete, this.t('delcol'), () => this.tableOp('delcol')), 'col'),\r\n this.ctxSep(),\r\n this.ctxBtn(IC.alignleft, this.t('tblalignleft'), () => this.alignTable('left')),\r\n this.ctxBtn(IC.aligncenter, this.t('tblaligncenter'), () => this.alignTable('center')),\r\n this.ctxBtn(IC.alignright, this.t('tblalignright'), () => this.alignTable('right')),\r\n this.ctxSep(),\r\n fillBtn,\r\n this.ctxBtn(IC.trash, this.t('deltable'), () => this.tableOp('deltable')),\r\n this.ctxBtn(IC.tableic, this.t('tablepropsttl'), () => this.tablePropsDlg())\r\n );\r\n document.body.appendChild(el);\r\n return el;\r\n }\r\n\r\n private positionTableHandles(): void {\r\n if (!this.tblActive || !document.body.contains(this.tblActive)) {\r\n this.clearTableHandles();\r\n return;\r\n }\r\n const rtl = this.ed.getAttribute('dir') === 'rtl';\r\n const r = this.tblActive.getBoundingClientRect();\r\n const top = r.top + scrollY;\r\n const left = r.left + scrollX;\r\n const right = r.right + scrollX;\r\n const bottom = r.bottom + scrollY;\r\n if (this.tblCorner) {\r\n this.tblCorner.style.top = bottom - 5 + 'px';\r\n this.tblCorner.style.left = (rtl ? left - 5 : right - 5) + 'px';\r\n this.tblCorner.style.cursor = rtl ? 'nesw-resize' : 'nwse-resize';\r\n }\r\n if (this.tblCtx) {\r\n const cw = this.tblCtx.offsetWidth;\r\n const ch = this.tblCtx.offsetHeight;\r\n let cx = left + (right - left) / 2 - cw / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = top - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = bottom + 8;\r\n this.tblCtx.style.left = cx + 'px';\r\n this.tblCtx.style.top = cy + 'px';\r\n }\r\n this.tblColBars.forEach((b) => b.remove());\r\n this.tblColBars = [];\r\n const row = this.tblActive.rows[0];\r\n if (row) {\r\n for (let i = 0; i < row.cells.length - 1; i++) {\r\n const rA = row.cells[i].getBoundingClientRect();\r\n const boundaryX = (rtl ? rA.left : rA.right) + scrollX;\r\n const bar = document.createElement('div');\r\n bar.className = 'tbl-colbar';\r\n bar.style.top = top + 'px';\r\n bar.style.left = boundaryX + 'px';\r\n bar.style.height = bottom - top + 'px';\r\n document.body.appendChild(bar);\r\n bar.addEventListener('mousedown', (e) => this.startColBarDrag(e, i));\r\n this.tblColBars.push(bar);\r\n }\r\n }\r\n this.positionCellMarker();\r\n this.positionOpMark();\r\n }\r\n\r\n private selectTableForResize(table: HTMLTableElement): void {\r\n if (this.tblActive === table) return;\r\n this.clearTableHandles();\r\n this.tblActive = table;\r\n table.classList.add('tbl-selected');\r\n this.tblCorner = document.createElement('div');\r\n this.tblCorner.className = 'tbl-handle';\r\n document.body.appendChild(this.tblCorner);\r\n this.tblCorner.addEventListener('mousedown', (e) => this.startTableCornerDrag(e));\r\n this.tblCellMark = document.createElement('div');\r\n this.tblCellMark.className = 'tbl-cellmark';\r\n this.tblCellMark.style.display = 'none';\r\n document.body.appendChild(this.tblCellMark);\r\n this.tblCtx = this.buildTableCtxToolbar();\r\n this.positionTableHandles();\r\n }\r\n\r\n private withNoTextSelect(fn: (restore: () => void) => void): void {\r\n const prev = document.body.style.userSelect;\r\n document.body.style.userSelect = 'none';\r\n fn(() => {\r\n document.body.style.userSelect = prev;\r\n });\r\n }\r\n\r\n private startTableCornerDrag(e: MouseEvent): void {\r\n e.preventDefault();\r\n const table = this.tblActive;\r\n if (!table) return;\r\n const rtl = this.ed.getAttribute('dir') === 'rtl';\r\n const startX = e.clientX;\r\n const startW = table.getBoundingClientRect().width;\r\n table.style.tableLayout = table.style.tableLayout || 'fixed';\r\n this.withNoTextSelect((restore) => {\r\n const mv = (ev: MouseEvent) => {\r\n const dx = rtl ? -(ev.clientX - startX) : ev.clientX - startX;\r\n table.style.width = Math.max(60, Math.round(startW + dx)) + 'px';\r\n this.positionTableHandles();\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n restore();\r\n this.onChange();\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n });\r\n }\r\n\r\n private startColBarDrag(e: MouseEvent, i: number): void {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const table = this.tblActive;\r\n if (!table) return;\r\n const rtl = this.ed.getAttribute('dir') === 'rtl';\r\n const rows = Array.from(table.rows);\r\n const colA = rows.map((r) => r.cells[i]).filter(Boolean) as HTMLTableCellElement[];\r\n const colB = rows.map((r) => r.cells[i + 1]).filter(Boolean) as HTMLTableCellElement[];\r\n if (!colA.length || !colB.length) return;\r\n const startX = e.clientX;\r\n const wA = colA[0].getBoundingClientRect().width;\r\n const wB = colB[0].getBoundingClientRect().width;\r\n table.style.tableLayout = 'fixed';\r\n this.withNoTextSelect((restore) => {\r\n const mv = (ev: MouseEvent) => {\r\n const dx = (rtl ? -1 : 1) * (ev.clientX - startX);\r\n colA.forEach((c) => (c.style.width = Math.max(24, Math.round(wA + dx)) + 'px'));\r\n colB.forEach((c) => (c.style.width = Math.max(24, Math.round(wB - dx)) + 'px'));\r\n this.positionTableHandles();\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n restore();\r\n this.onChange();\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- image toolbar / resize */\r\n private cancelImgHide(): void {\r\n if (this.imgHideTimer != null) {\r\n window.clearTimeout(this.imgHideTimer);\r\n this.imgHideTimer = null;\r\n }\r\n }\r\n\r\n private scheduleImgHide(): void {\r\n this.cancelImgHide();\r\n this.imgHideTimer = window.setTimeout(() => this.clearImageHandles(), 250);\r\n }\r\n\r\n private clearImageHandles(): void {\r\n this.cancelImgHide();\r\n this.imgHandles.forEach((h) => h.remove());\r\n this.imgHandles = [];\r\n this.imgCtx?.remove();\r\n this.imgCtx = null;\r\n this.imgActive?.classList.remove('img-selected');\r\n this.imgActive = null;\r\n }\r\n\r\n private selectImage(img: HTMLImageElement): void {\r\n if (this.imgActive === img) return;\r\n this.clearImageHandles();\r\n this.imgActive = img;\r\n img.classList.add('img-selected');\r\n this.imgHandles = IMG_CORNERS.map((corner) => {\r\n const h = document.createElement('div');\r\n h.className = 'img-handle img-handle-' + corner;\r\n h.dataset.corner = corner;\r\n h.addEventListener('mousedown', (e) => this.startImageResizeDrag(e, corner));\r\n h.addEventListener('mouseenter', () => this.cancelImgHide());\r\n h.addEventListener('mouseleave', () => this.scheduleImgHide());\r\n document.body.appendChild(h);\r\n return h;\r\n });\r\n this.imgCtx = this.buildImageCtxToolbar(img);\r\n this.positionImageHandles();\r\n }\r\n\r\n private buildImageCtxToolbar(img: HTMLImageElement): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'imgctx';\r\n el.dir = this.dir();\r\n const rebuild = () => {\r\n const rebuilt = this.buildImageCtxToolbar(img);\r\n this.imgCtx?.replaceWith(rebuilt);\r\n this.imgCtx = rebuilt;\r\n this.positionImageHandles();\r\n };\r\n const align = (a: 'left' | 'center' | 'right') => {\r\n this.setImageAlign(img, a);\r\n rebuild();\r\n };\r\n const isLeft = img.style.float === 'left';\r\n const isRight = img.style.float === 'right';\r\n const isCenter = !isLeft && !isRight && img.style.marginLeft === 'auto' && img.style.marginRight === 'auto';\r\n const mkBtn = (icon: string, tip: string, on: boolean, fn: () => void) => {\r\n const b = this.ctxBtn(icon, tip, fn);\r\n b.classList.toggle('on', on);\r\n return b;\r\n };\r\n el.append(\r\n mkBtn(IC.alignleft, this.t('alignleft'), isLeft, () => align('left')),\r\n mkBtn(IC.aligncenter, this.t('aligncenter'), isCenter, () => align('center')),\r\n mkBtn(IC.alignright, this.t('alignright'), isRight, () => align('right')),\r\n this.ctxSep(),\r\n mkBtn(IC.rotateleft, this.t('rotateleft'), false, () => {\r\n this.rotateImage(img, -90);\r\n rebuild();\r\n }),\r\n mkBtn(IC.rotateright, this.t('rotateright'), false, () => {\r\n this.rotateImage(img, 90);\r\n rebuild();\r\n }),\r\n this.ctxSep(),\r\n mkBtn(IC.fliphorizontal, this.t('fliphorizontal'), img.dataset.flipx === '1', () => {\r\n this.flipImage(img, 'x');\r\n rebuild();\r\n }),\r\n mkBtn(IC.flipvertical, this.t('flipvertical'), img.dataset.flipy === '1', () => {\r\n this.flipImage(img, 'y');\r\n rebuild();\r\n }),\r\n this.ctxSep(),\r\n mkBtn(IC.trash, this.t('deleteimg'), false, () => {\r\n /* inside a template media slot the image swaps back to an\r\n upload placeholder so the slot is not lost */\r\n const slot = img.closest('.tpl-media');\r\n if (slot && this.ed.contains(slot)) img.outerHTML = this.imgPhHTML();\r\n else img.remove();\r\n this.clearImageHandles();\r\n this.onChange();\r\n })\r\n );\r\n el.addEventListener('mousedown', (e) => e.preventDefault());\r\n el.addEventListener('mouseenter', () => this.cancelImgHide());\r\n el.addEventListener('mouseleave', () => this.scheduleImgHide());\r\n document.body.appendChild(el);\r\n return el;\r\n }\r\n\r\n private setImageAlign(img: HTMLImageElement, align: 'left' | 'center' | 'right'): void {\r\n img.style.float = '';\r\n img.style.display = '';\r\n img.style.marginLeft = '';\r\n img.style.marginRight = '';\r\n img.style.marginBottom = '';\r\n if (align === 'left') {\r\n img.style.float = 'left';\r\n img.style.marginInlineEnd = '1em';\r\n img.style.marginBottom = '0.5em';\r\n } else if (align === 'right') {\r\n img.style.float = 'right';\r\n img.style.marginInlineStart = '1em';\r\n img.style.marginBottom = '0.5em';\r\n } else {\r\n img.style.display = 'block';\r\n img.style.marginLeft = 'auto';\r\n img.style.marginRight = 'auto';\r\n }\r\n this.onChange();\r\n }\r\n\r\n private applyImgTransform(img: HTMLImageElement): void {\r\n const rot = parseInt(img.dataset.rotate || '0', 10);\r\n const fx = img.dataset.flipx === '1' ? -1 : 1;\r\n const fy = img.dataset.flipy === '1' ? -1 : 1;\r\n img.style.transform = rot || fx < 0 || fy < 0 ? `rotate(${rot}deg) scale(${fx}, ${fy})` : '';\r\n }\r\n\r\n private rotateImage(img: HTMLImageElement, delta: number): void {\r\n const rot = (((parseInt(img.dataset.rotate || '0', 10) + delta) % 360) + 360) % 360;\r\n img.dataset.rotate = String(rot);\r\n this.applyImgTransform(img);\r\n this.positionImageHandles();\r\n this.onChange();\r\n }\r\n\r\n private flipImage(img: HTMLImageElement, axis: 'x' | 'y'): void {\r\n const key = axis === 'x' ? 'flipx' : 'flipy';\r\n img.dataset[key] = img.dataset[key] === '1' ? '' : '1';\r\n this.applyImgTransform(img);\r\n this.positionImageHandles();\r\n this.onChange();\r\n }\r\n\r\n private positionImageHandles(): void {\r\n if (!this.imgActive || !document.body.contains(this.imgActive)) {\r\n this.clearImageHandles();\r\n return;\r\n }\r\n const r = this.imgActive.getBoundingClientRect();\r\n const top = r.top + scrollY;\r\n const left = r.left + scrollX;\r\n const right = r.right + scrollX;\r\n const bottom = r.bottom + scrollY;\r\n const cornerPos: Record<ImgCorner, [number, number]> = {\r\n nw: [left, top],\r\n ne: [right, top],\r\n sw: [left, bottom],\r\n se: [right, bottom]\r\n };\r\n this.imgHandles.forEach((h) => {\r\n const [x, y] = cornerPos[h.dataset.corner as ImgCorner];\r\n h.style.left = x - 5 + 'px';\r\n h.style.top = y - 5 + 'px';\r\n });\r\n if (this.imgCtx) {\r\n const cw = this.imgCtx.offsetWidth;\r\n const ch = this.imgCtx.offsetHeight;\r\n let cx = left + (right - left) / 2 - cw / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = top - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = bottom + 8;\r\n this.imgCtx.style.left = cx + 'px';\r\n this.imgCtx.style.top = cy + 'px';\r\n }\r\n }\r\n\r\n private startImageResizeDrag(e: MouseEvent, corner: ImgCorner): void {\r\n e.preventDefault();\r\n const img = this.imgActive;\r\n if (!img) return;\r\n this.cancelImgHide();\r\n const startX = e.clientX;\r\n const startW = img.getBoundingClientRect().width;\r\n const sign = corner === 'nw' || corner === 'sw' ? -1 : 1;\r\n this.withNoTextSelect((restore) => {\r\n const mv = (ev: MouseEvent) => {\r\n img.style.width = Math.max(24, Math.round(startW + sign * (ev.clientX - startX))) + 'px';\r\n img.style.height = 'auto';\r\n this.positionImageHandles();\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n restore();\r\n this.onChange();\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- selection bubble toolbar */\r\n private toggleBlock(tag: string): void {\r\n this.exec('formatBlock', this.currentBlock() === tag ? '<p>' : '<' + tag + '>');\r\n }\r\n\r\n private clearSelToolbar(): void {\r\n this.selCtx?.remove();\r\n this.selCtx = null;\r\n }\r\n\r\n private updateSelToolbar(sel: Selection): void {\r\n if (this.options.readonly || sel.isCollapsed || !sel.rangeCount) {\r\n this.clearSelToolbar();\r\n return;\r\n }\r\n const range = sel.getRangeAt(0);\r\n const r = range.getBoundingClientRect();\r\n if (!r.width && !r.height) {\r\n this.clearSelToolbar();\r\n return;\r\n }\r\n if (!this.selCtx) this.selCtx = this.buildSelToolbar();\r\n this.positionSelToolbar(range);\r\n }\r\n\r\n private buildSelToolbar(): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'selctx';\r\n el.dir = this.dir();\r\n const foreBtn = this.ctxBtn(\r\n '<b style=\"font:600 15px/1 Georgia,serif\">A</b><span class=\"colorbar\" data-cb=\"fore\"></span>',\r\n this.t('forecolor'),\r\n () => this.colorMenu(foreBtn, 'fore')\r\n );\r\n const backBtn = this.ctxBtn(IC.backcolor, this.t('backcolor'), () => this.colorMenu(backBtn, 'back'));\r\n backBtn.querySelector('svg')?.insertAdjacentHTML('afterend', '<span class=\"colorbar\" data-cb=\"back\"></span>');\r\n const caseBtn = this.ctxBtn(IC.caseic, this.t('changecase'), () => this.caseMenu(caseBtn));\r\n const lhBtn = this.ctxBtn(IC.lineheight, this.t('lineheight'), () => this.lineHeightMenu(lhBtn));\r\n const wsBtn = this.ctxBtn(IC.wordspacing, this.t('wordspacing'), () => this.wordSpacingMenu(wsBtn));\r\n el.append(\r\n this.ctxBtn(IC.bold, this.t('bold'), () => this.exec('bold'), 'bold'),\r\n this.ctxBtn(IC.italic, this.t('italic'), () => this.exec('italic'), 'italic'),\r\n foreBtn,\r\n backBtn,\r\n this.ctxSep(),\r\n this.ctxBtn(IC.quote, this.t('quote'), () => this.toggleBlock('blockquote'), 'blockquote'),\r\n this.ctxBtn(IC.inlinecodeic, this.t('code'), () => this.toggleInlineCode(), 'code'),\r\n this.ctxBtn('<b style=\"font:700 12px/1 Arial,sans-serif\">H2</b>', this.blockLabel('h2'), () => this.toggleBlock('h2'), 'h2'),\r\n this.ctxBtn('<b style=\"font:700 12px/1 Arial,sans-serif\">H3</b>', this.blockLabel('h3'), () => this.toggleBlock('h3'), 'h3'),\r\n this.ctxSep(),\r\n this.ctxBtn(IC.link, this.t('linkttl'), () => this.linkDlg()),\r\n caseBtn,\r\n lhBtn,\r\n wsBtn\r\n );\r\n el.addEventListener('mousedown', (e) => e.preventDefault());\r\n document.body.appendChild(el);\r\n this.syncColorSwatches(el);\r\n return el;\r\n }\r\n\r\n private positionSelToolbar(range: Range): void {\r\n if (!this.selCtx) return;\r\n const r = range.getBoundingClientRect();\r\n const top = r.top + scrollY;\r\n const left = r.left + scrollX;\r\n const right = r.right + scrollX;\r\n const bottom = r.bottom + scrollY;\r\n const cw = this.selCtx.offsetWidth;\r\n const ch = this.selCtx.offsetHeight;\r\n let cx = left + (right - left) / 2 - cw / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = top - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = bottom + 8;\r\n this.selCtx.style.left = cx + 'px';\r\n this.selCtx.style.top = cy + 'px';\r\n }\r\n\r\n private repositionSelToolbar(): void {\r\n if (!this.selCtx) return;\r\n const s = window.getSelection();\r\n if (s && s.rangeCount && !s.isCollapsed && this.ed.contains(s.anchorNode)) this.positionSelToolbar(s.getRangeAt(0));\r\n }\r\n\r\n /* ---------------------------------------------------------- state sync */\r\n private currentBlock(): string {\r\n const s = window.getSelection();\r\n if (!s || !s.anchorNode || !this.ed.contains(s.anchorNode)) return 'p';\r\n const b = this.closestBlock(s.anchorNode);\r\n return b ? b.tagName.toLowerCase().replace('div', 'p') : 'p';\r\n }\r\n\r\n /** Element whose computed font reflects the current caret, falling back to the editor root before any selection lands inside it. */\r\n private fontRefEl(): Element {\r\n const s = window.getSelection();\r\n if (s && s.anchorNode && this.ed.contains(s.anchorNode)) {\r\n return s.anchorNode.nodeType === 1 ? (s.anchorNode as Element) : (s.anchorNode.parentElement as Element);\r\n }\r\n return this.ed;\r\n }\r\n\r\n private currentFont(): string {\r\n const fam = getComputedStyle(this.fontRefEl()).fontFamily.toLowerCase();\r\n const hit = this.options.fontFamilyFormats.find(([n, v]) => fam.includes(v.split(',')[0].toLowerCase()));\r\n return hit ? hit[0] : '';\r\n }\r\n\r\n private currentSize(): string {\r\n const px = Math.round(parseFloat(getComputedStyle(this.fontRefEl()).fontSize));\r\n return px > 0 ? px + 'px' : '';\r\n }\r\n\r\n private refreshState(): void {\r\n const s = window.getSelection();\r\n const inEd = s ? this.ed.contains(s.anchorNode) : false;\r\n const blkTag = this.currentBlock();\r\n const containers = [this.toolbar, this.selCtx].filter(Boolean) as HTMLElement[];\r\n containers.forEach((container) => {\r\n (\r\n [\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strikeThrough',\r\n 'justifyLeft',\r\n 'justifyCenter',\r\n 'justifyRight',\r\n 'justifyFull',\r\n 'insertOrderedList',\r\n 'insertUnorderedList'\r\n ] as const\r\n ).forEach((c) => {\r\n const b = container.querySelector(`[data-id=${c}]`) as HTMLElement | null;\r\n if (b) b.classList.toggle('on', inEd && document.queryCommandState(c));\r\n });\r\n (['h2', 'h3', 'blockquote'] as const).forEach((tag) => {\r\n const b = container.querySelector(`[data-id=${tag}]`) as HTMLElement | null;\r\n if (b) b.classList.toggle('on', inEd && blkTag === tag);\r\n });\r\n const codeB = container.querySelector('[data-id=code]') as HTMLElement | null;\r\n if (codeB) codeB.classList.toggle('on', inEd && !!this.closestInlineCode());\r\n });\r\n const blk = s ? this.closestBlock(s.anchorNode) : null;\r\n const dir = blk?.closest('[dir]')?.getAttribute('dir') || this.ed.getAttribute('dir') || this.dir();\r\n this.toolbar.querySelector('[data-id=ltr]')?.classList.toggle('on', inEd && dir === 'ltr');\r\n this.toolbar.querySelector('[data-id=rtl]')?.classList.toggle('on', inEd && dir === 'rtl');\r\n const setLbl = (id: string, val: string, def?: string) => {\r\n const l = this.toolbar.querySelector(`[data-id=${id}] .lbl`) as HTMLElement | null;\r\n if (!l) return;\r\n l.textContent = val || def || '';\r\n l.classList.toggle('empty', !val);\r\n };\r\n setLbl('fontsel', this.currentFont());\r\n setLbl('sizesel', this.currentSize().replace('px', ''));\r\n if (inEd) {\r\n setLbl('blocksel', BLOCKS.some((b) => b[0] === blkTag) ? this.blockLabel(blkTag) : this.t('para'));\r\n }\r\n this.sbWords.textContent = this.countWords() + ' ' + this.t('words');\r\n }\r\n\r\n private countWords(): number {\r\n const txt = (this.ed.textContent || '').trim();\r\n return txt ? txt.split(/\\s+/).length : 0;\r\n }\r\n\r\n /* ---------------------------------------------------------- paste */\r\n private handlePaste(e: ClipboardEvent): void {\r\n const cd = e.clipboardData;\r\n if (!cd) return;\r\n e.preventDefault();\r\n const html = cd.getData('text/html');\r\n const imgItem = Array.from(cd.items).find((i) => i.type.startsWith('image/'));\r\n if (imgItem && !html) {\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n document.execCommand('insertHTML', false, `<img src=\"${fr.result}\" alt=\"\">`);\r\n this.onChange();\r\n };\r\n fr.readAsDataURL(imgItem.getAsFile() as Blob);\r\n return;\r\n }\r\n if (!html) {\r\n /* additive pre-check before the normal text pipeline runs (the paste\r\n engine itself is untouched): a bare video page URL (YouTube & co.)\r\n becomes an embedded player. Anything else falls through unchanged. */\r\n const text = cd.getData('text/plain');\r\n const embed = /^\\S+$/.test(text.trim()) ? this.videoEmbedUrl(text.trim()) : null;\r\n if (embed) {\r\n document.execCommand('insertHTML', false, this.videoEmbedHTML(embed));\r\n this.onChange();\r\n return;\r\n }\r\n }\r\n if (html) {\r\n document.execCommand('insertHTML', false, cleanPastedHTML(html, this.dir()));\r\n } else {\r\n document.execCommand('insertHTML', false, normalizeTextPaste(cd.getData('text/plain')));\r\n }\r\n this.onChange();\r\n }\r\n\r\n /* ---------------------------------------------------------- init */\r\n private initUI(): void {\r\n this.closePop();\r\n this.closeDlg();\r\n this.clearTableHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.shell.dir = this.dir();\r\n this.ed.dir = this.dir();\r\n if (this.options.menubar) this.buildMenubar();\r\n else this.menubar.style.display = 'none';\r\n if (this.options.toolbar) this.buildToolbar();\r\n else this.toolbar.style.display = 'none';\r\n this.sbHelp.textContent = this.t('statushelp');\r\n this.refreshState();\r\n }\r\n}\r\n\r\nexport default FableEditor;\r\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { FableEditor, EditorInitOptions, EditorLanguage, FableEditorApi } from '../core';\n\n@Component({\n selector: 'fable-editor',\n standalone: true,\n template: `<div #container></div>`,\n styles: [':host { display: block; }']\n})\nexport class FableEditorComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('container', { static: true }) container!: ElementRef<HTMLDivElement>;\n\n @Input() language: EditorLanguage = 'en';\n @Input() height = 302;\n @Input() menubar: boolean | string = true;\n @Input() toolbar: boolean | string = true;\n @Input() statusbar = true;\n @Input() readonly = false;\n @Input() primaryColor?: string;\n @Input() toolbarGroupBackground?: string;\n @Input() uiFontFamily?: string;\n @Input() init: Partial<Omit<EditorInitOptions, 'target'>> = {};\n @Input() value = '';\n\n @Output() editorChange = new EventEmitter<string>();\n @Output() editorReady = new EventEmitter<FableEditorApi>();\n\n private editor?: FableEditor;\n private lastContent = '';\n\n ngOnInit(): void {\n this.lastContent = this.value;\n this.editor = new FableEditor({\n target: this.container.nativeElement,\n language: this.language,\n height: this.height,\n menubar: this.menubar,\n toolbar: this.toolbar,\n statusbar: this.statusbar,\n readonly: this.readonly,\n primaryColor: this.primaryColor,\n toolbarGroupBackground: this.toolbarGroupBackground,\n uiFontFamily: this.uiFontFamily,\n initialContent: this.value,\n ...this.init,\n onChange: (content) => {\n this.lastContent = content;\n this.editorChange.emit(content);\n },\n onReady: (api) => this.editorReady.emit(api)\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.editor) return;\n if (changes['language'] && !changes['language'].firstChange) {\n this.editor.setLanguage(this.language);\n }\n if (changes['value'] && !changes['value'].firstChange && this.value !== this.lastContent) {\n this.lastContent = this.value;\n this.editor.setContent(this.value ?? '');\n }\n }\n\n ngOnDestroy(): void {\n this.editor?.destroy();\n this.editor = undefined;\n }\n\n getContent(): string {\n return this.editor?.getContent() ?? '';\n }\n\n setContent(html: string): void {\n this.lastContent = html;\n this.editor?.setContent(html ?? '');\n }\n\n insertContent(html: string): void {\n this.editor?.insertContent(html);\n }\n\n setLanguage(lang: EditorLanguage): void {\n this.editor?.setLanguage(lang);\n }\n\n focus(): void {\n this.editor?.focus();\n }\n\n writeValue(value: string): void {\n this.editor?.setContent(value ?? '');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FableEditorComponent } from './fable-editor.component';\n\n@NgModule({\n imports: [FableEditorComponent],\n exports: [FableEditorComponent]\n})\nexport class FableEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fable-editor.mjs","sources":["../../../src/core/i18n.ts","../../../src/core/config.ts","../../../src/core/icons.ts","../../../src/core/paste-engine.ts","../../../src/core/docx-import.ts","../../../src/core/editor.ts","../../../src/angular/fable-editor.component.ts","../../../src/angular/fable-editor.module.ts","../../../src/fable-editor.ts"],"sourcesContent":["import { EditorLanguage } from './types';\r\n\r\nexport interface I18nStrings {\r\n dir: 'ltr' | 'rtl';\r\n file: string;\r\n edit: string;\r\n view: string;\r\n insert: string;\r\n format: string;\r\n tools: string;\r\n table: string;\r\n help: string;\r\n newdoc: string;\r\n preview: string;\r\n print: string;\r\n undo: string;\r\n redo: string;\r\n cut: string;\r\n copy: string;\r\n paste: string;\r\n selectall: string;\r\n fullscreen: string;\r\n sourcecode: string;\r\n wordcount: string;\r\n image: string;\r\n inserttable: string;\r\n hr: string;\r\n charmap: string;\r\n datetime: string;\r\n pagebreak: string;\r\n nbsp: string;\r\n bold: string;\r\n italic: string;\r\n underline: string;\r\n strikethrough: string;\r\n superscript: string;\r\n subscript: string;\r\n clearformat: string;\r\n rowabove: string;\r\n rowbelow: string;\r\n delrow: string;\r\n moverowup: string;\r\n moverowdown: string;\r\n colbefore: string;\r\n colafter: string;\r\n delcol: string;\r\n movecolleft: string;\r\n movecolright: string;\r\n cellbg: string;\r\n deltable: string;\r\n ltr: string;\r\n rtl: string;\r\n alignleft: string;\r\n aligncenter: string;\r\n alignright: string;\r\n alignjustify: string;\r\n align: string;\r\n numlist: string;\r\n bullist: string;\r\n forecolor: string;\r\n backcolor: string;\r\n removeformat: string;\r\n outdent: string;\r\n indent: string;\r\n fontfamily: string;\r\n fontsize: string;\r\n blocks: string;\r\n quickimage: string;\r\n quicktable: string;\r\n more: string;\r\n para: string;\r\n heading: string;\r\n pre: string;\r\n removecolor: string;\r\n currentcolor: string;\r\n statushelp: string;\r\n words: string;\r\n helpttl: string;\r\n shortcuts: string;\r\n close: string;\r\n save: string;\r\n cancel: string;\r\n srcttl: string;\r\n wcttl: string;\r\n wcwords: string;\r\n wcchars: string;\r\n pastehint: string;\r\n liststyles_ol: string[];\r\n liststyles_ul: string[];\r\n previewttl: string;\r\n tablepropsttl: string;\r\n tblwidth: string;\r\n tblcellspacing: string;\r\n tblcellpadding: string;\r\n tblborder: string;\r\n tblalign: string;\r\n tblalignleft: string;\r\n tblaligncenter: string;\r\n tblalignright: string;\r\n alignnone: string;\r\n quote: string;\r\n link: string;\r\n linkttl: string;\r\n linkurl: string;\r\n unlink: string;\r\n lineheight: string;\r\n wordspacing: string;\r\n letterspacing: string;\r\n changecase: string;\r\n lowercase: string;\r\n uppercase: string;\r\n capitalize: string;\r\n customcolor: string;\r\n normal: string;\r\n revhistory: string;\r\n revempty: string;\r\n restore: string;\r\n currentver: string;\r\n importword: string;\r\n importfail: string;\r\n restoredraft: string;\r\n draftempty: string;\r\n deleteimg: string;\r\n rotateleft: string;\r\n rotateright: string;\r\n fliphorizontal: string;\r\n flipvertical: string;\r\n cell: string;\r\n row: string;\r\n column: string;\r\n cellprops: string;\r\n rowprops: string;\r\n colprops: string;\r\n tblheight: string;\r\n valign: string;\r\n valigntop: string;\r\n valignmiddle: string;\r\n valignbottom: string;\r\n fill: string;\r\n nocell: string;\r\n uploadimg: string;\r\n imagelink: string;\r\n imageurlph: string;\r\n insertimg: string;\r\n dropimage: string;\r\n uploading: string;\r\n uploadfailed: string;\r\n template: string;\r\n tplimgleft: string;\r\n tplimgright: string;\r\n tplimgtop: string;\r\n tplimgcenter: string;\r\n deltemplate: string;\r\n video: string;\r\n quickvideo: string;\r\n deletevideo: string;\r\n uploadvideo: string;\r\n videolink: string;\r\n videourlph: string;\r\n insertvideo: string;\r\n dropvideo: string;\r\n videodlgttl: string;\r\n vidgeneral: string;\r\n vidembed: string;\r\n vidadvanced: string;\r\n vidsource: string;\r\n vidembedhint: string;\r\n vidaltsource: string;\r\n vidposter: string;\r\n emoji: string;\r\n code: string;\r\n codesample: string;\r\n codedlgttl: string;\r\n codelang: string;\r\n editcode: string;\r\n deletecode: string;\r\n copycode: string;\r\n chcat_currency: string;\r\n chcat_text: string;\r\n chcat_math: string;\r\n chcat_arrows: string;\r\n chcat_symbols: string;\r\n chcat_latin: string;\r\n chcat_arabic: string;\r\n emcat_smileys: string;\r\n emcat_people: string;\r\n emcat_animals: string;\r\n emcat_food: string;\r\n emcat_travel: string;\r\n emcat_activities: string;\r\n emcat_objects: string;\r\n emcat_symbols: string;\r\n emcat_flags: string;\r\n}\r\n\r\nexport const I18N: Record<EditorLanguage, I18nStrings> = {\r\n en: {\r\n dir: 'ltr',\r\n file: 'File',\r\n edit: 'Edit',\r\n view: 'View',\r\n insert: 'Insert',\r\n format: 'Format',\r\n tools: 'Tools',\r\n table: 'Table',\r\n help: 'Help',\r\n newdoc: 'New document',\r\n preview: 'Preview',\r\n print: 'Print…',\r\n undo: 'Undo',\r\n redo: 'Redo',\r\n cut: 'Cut',\r\n copy: 'Copy',\r\n paste: 'Paste',\r\n selectall: 'Select all',\r\n fullscreen: 'Fullscreen',\r\n sourcecode: 'Source code',\r\n wordcount: 'Word count',\r\n image: 'Image…',\r\n inserttable: 'Table',\r\n hr: 'Horizontal line',\r\n charmap: 'Special character…',\r\n datetime: 'Date/time',\r\n pagebreak: 'Page break',\r\n nbsp: 'Nonbreaking space',\r\n bold: 'Bold',\r\n italic: 'Italic',\r\n underline: 'Underline',\r\n strikethrough: 'Strikethrough',\r\n superscript: 'Superscript',\r\n subscript: 'Subscript',\r\n clearformat: 'Clear formatting',\r\n rowabove: 'Insert row before',\r\n rowbelow: 'Insert row after',\r\n delrow: 'Delete row',\r\n moverowup: 'Move row up',\r\n moverowdown: 'Move row down',\r\n colbefore: 'Insert column before',\r\n colafter: 'Insert column after',\r\n delcol: 'Delete column',\r\n movecolleft: 'Move column left',\r\n movecolright: 'Move column right',\r\n cellbg: 'Cell background',\r\n deltable: 'Delete table',\r\n ltr: 'Left to right',\r\n rtl: 'Right to left',\r\n alignleft: 'Align left',\r\n aligncenter: 'Align center',\r\n alignright: 'Align right',\r\n alignjustify: 'Justify',\r\n align: 'Align',\r\n numlist: 'Numbered list',\r\n bullist: 'Bullet list',\r\n forecolor: 'Text color',\r\n backcolor: 'Background color',\r\n removeformat: 'Clear formatting',\r\n outdent: 'Decrease indent',\r\n indent: 'Increase indent',\r\n fontfamily: 'Font family',\r\n fontsize: 'Font size',\r\n blocks: 'Blocks',\r\n quickimage: 'Insert image',\r\n quicktable: 'Insert table',\r\n more: 'More…',\r\n para: 'Paragraph',\r\n heading: 'Heading',\r\n pre: 'Preformatted',\r\n removecolor: 'Remove color',\r\n currentcolor: 'Current color',\r\n statushelp: 'Press Alt+0 for help',\r\n words: 'words',\r\n helpttl: 'Help',\r\n shortcuts: 'Handy shortcuts',\r\n close: 'Close',\r\n save: 'Save',\r\n cancel: 'Cancel',\r\n srcttl: 'Source code',\r\n wcttl: 'Word count',\r\n wcwords: 'Words',\r\n wcchars: 'Characters',\r\n pastehint: 'Use Ctrl+V / ⌘V to paste',\r\n liststyles_ol: ['Default', 'Lower alpha', 'Lower roman', 'Upper alpha', 'Upper roman'],\r\n liststyles_ul: ['Default', 'Circle', 'Square'],\r\n previewttl: 'Preview',\r\n tablepropsttl: 'Table properties',\r\n tblwidth: 'Width',\r\n tblcellspacing: 'Cell spacing',\r\n tblcellpadding: 'Cell padding',\r\n tblborder: 'Border width',\r\n tblalign: 'Alignment',\r\n tblalignleft: 'Align table left',\r\n tblaligncenter: 'Center table',\r\n tblalignright: 'Align table right',\r\n alignnone: 'None',\r\n quote: 'Blockquote',\r\n link: 'Link…',\r\n linkttl: 'Insert/edit link',\r\n linkurl: 'URL',\r\n unlink: 'Remove link',\r\n lineheight: 'Line height',\r\n wordspacing: 'Word spacing',\r\n letterspacing: 'Letter spacing',\r\n changecase: 'Change case',\r\n lowercase: 'Lowercase',\r\n uppercase: 'Uppercase',\r\n capitalize: 'Capitalize Each Word',\r\n customcolor: 'Custom color…',\r\n normal: 'Normal',\r\n revhistory: 'Revision history',\r\n revempty: 'No revisions yet',\r\n restore: 'Restore',\r\n currentver: 'Current version',\r\n importword: 'Import from Word…',\r\n importfail: 'Could not import this file. Please choose a valid .docx document.',\r\n restoredraft: 'Restore last draft',\r\n draftempty: 'No saved draft found',\r\n deleteimg: 'Delete image',\r\n rotateleft: 'Rotate left',\r\n rotateright: 'Rotate right',\r\n fliphorizontal: 'Flip horizontal',\r\n flipvertical: 'Flip vertical',\r\n cell: 'Cell',\r\n row: 'Row',\r\n column: 'Column',\r\n cellprops: 'Cell properties…',\r\n rowprops: 'Row properties…',\r\n colprops: 'Column properties…',\r\n tblheight: 'Height',\r\n valign: 'Vertical align',\r\n valigntop: 'Top',\r\n valignmiddle: 'Middle',\r\n valignbottom: 'Bottom',\r\n fill: 'Fill',\r\n nocell: 'Click inside a table cell first',\r\n uploadimg: 'Upload from computer',\r\n imagelink: 'Insert from URL',\r\n imageurlph: 'Paste image URL…',\r\n insertimg: 'Insert',\r\n dropimage: 'Drop image here',\r\n uploading: 'Uploading…',\r\n uploadfailed: 'Upload failed — click to retry',\r\n template: 'Templates',\r\n tplimgleft: 'Image left, text right',\r\n tplimgright: 'Image right, text left',\r\n tplimgtop: 'Image top, text below',\r\n tplimgcenter: 'Text top, image center',\r\n deltemplate: 'Delete template',\r\n video: 'Video',\r\n quickvideo: 'Insert video',\r\n deletevideo: 'Delete video',\r\n uploadvideo: 'Upload from computer',\r\n videolink: 'Insert from URL',\r\n videourlph: 'Paste video URL…',\r\n insertvideo: 'Insert',\r\n dropvideo: 'Drop video here',\r\n videodlgttl: 'Insert/edit video',\r\n vidgeneral: 'General',\r\n vidembed: 'Embed',\r\n vidadvanced: 'Advanced',\r\n vidsource: 'Source',\r\n vidembedhint: 'Paste your embed code below:',\r\n vidaltsource: 'Alternative source URL',\r\n vidposter: 'Media poster (Image URL)',\r\n emoji: 'Emojis…',\r\n code: 'Inline code',\r\n codesample: 'Code sample…',\r\n codedlgttl: 'Insert/edit code sample',\r\n codelang: 'Language',\r\n editcode: 'Edit code sample',\r\n deletecode: 'Delete code sample',\r\n copycode: 'Copy code',\r\n chcat_currency: 'Currency',\r\n chcat_text: 'Text & punctuation',\r\n chcat_math: 'Mathematical',\r\n chcat_arrows: 'Arrows',\r\n chcat_symbols: 'Symbols',\r\n chcat_latin: 'Extended Latin',\r\n chcat_arabic: 'Arabic',\r\n emcat_smileys: 'Smileys & emotion',\r\n emcat_people: 'People & body',\r\n emcat_animals: 'Animals & nature',\r\n emcat_food: 'Food & drink',\r\n emcat_travel: 'Travel & places',\r\n emcat_activities: 'Activities',\r\n emcat_objects: 'Objects',\r\n emcat_symbols: 'Symbols',\r\n emcat_flags: 'Flags'\r\n },\r\n ar: {\r\n dir: 'rtl',\r\n file: 'ملف',\r\n edit: 'تحرير',\r\n view: 'عرض',\r\n insert: 'إدراج',\r\n format: 'التنسيق',\r\n tools: 'الأدوات',\r\n table: 'جدول',\r\n help: 'تعليمات',\r\n newdoc: 'مستند جديد',\r\n preview: 'معاينة',\r\n print: 'طباعة…',\r\n undo: 'تراجع',\r\n redo: 'إعادة',\r\n cut: 'قص',\r\n copy: 'نسخ',\r\n paste: 'لصق',\r\n selectall: 'تحديد الكل',\r\n fullscreen: 'ملء الشاشة',\r\n sourcecode: 'الكود المصدري',\r\n wordcount: 'عدد الكلمات',\r\n image: 'صورة…',\r\n inserttable: 'جدول',\r\n hr: 'خط أفقي',\r\n charmap: 'رمز خاص…',\r\n datetime: 'التاريخ/الوقت',\r\n pagebreak: 'فاصل الصفحة',\r\n nbsp: 'مسافة غير فاصلة',\r\n bold: 'غامق',\r\n italic: 'مائل',\r\n underline: 'تسطير',\r\n strikethrough: 'يتوسطه خط',\r\n superscript: 'نص مرتفع',\r\n subscript: 'نص منخفض',\r\n clearformat: 'مسح التنسيق',\r\n rowabove: 'إدراج صف قبل',\r\n rowbelow: 'إدراج صف بعد',\r\n delrow: 'حذف الصف',\r\n moverowup: 'نقل الصف لأعلى',\r\n moverowdown: 'نقل الصف لأسفل',\r\n colbefore: 'إدراج عمود قبل',\r\n colafter: 'إدراج عمود بعد',\r\n delcol: 'حذف العمود',\r\n movecolleft: 'نقل العمود لليسار',\r\n movecolright: 'نقل العمود لليمين',\r\n cellbg: 'خلفية الخلية',\r\n deltable: 'حذف الجدول',\r\n ltr: 'من اليسار إلى اليمين',\r\n rtl: 'من اليمين إلى اليسار',\r\n alignleft: 'محاذاة لليسار',\r\n aligncenter: 'توسيط',\r\n alignright: 'محاذاة لليمين',\r\n alignjustify: 'ضبط',\r\n align: 'محاذاة',\r\n numlist: 'قائمة رقمية',\r\n bullist: 'قائمة نقطية',\r\n forecolor: 'لون النص',\r\n backcolor: 'لون الخلفية',\r\n removeformat: 'مسح التنسيق',\r\n outdent: 'إنقاص المسافة البادئة',\r\n indent: 'زيادة المسافة البادئة',\r\n fontfamily: 'عائلة الخط',\r\n fontsize: 'حجم الخط',\r\n blocks: 'الفقرات',\r\n quickimage: 'إدراج صورة',\r\n quicktable: 'إدراج جدول',\r\n more: 'المزيد…',\r\n para: 'الفقرة',\r\n heading: 'العنوان',\r\n pre: 'منسق مسبقاً',\r\n removecolor: 'إزالة اللون',\r\n currentcolor: 'اللون الحالي',\r\n statushelp: 'اضغط على Alt+0 للحصول على مساعدة',\r\n words: 'الكلمات',\r\n helpttl: 'تعليمات',\r\n shortcuts: 'اختصارات مفيدة',\r\n close: 'إغلاق',\r\n save: 'حفظ',\r\n cancel: 'إلغاء',\r\n srcttl: 'الكود المصدري',\r\n wcttl: 'عدد الكلمات',\r\n wcwords: 'الكلمات',\r\n wcchars: 'الأحرف',\r\n pastehint: 'استخدم Ctrl+V / ⌘V للصق',\r\n liststyles_ol: ['افتراضي', 'أبجدي صغير', 'روماني صغير', 'أبجدي كبير', 'روماني كبير'],\r\n liststyles_ul: ['افتراضي', 'دائرة', 'مربع'],\r\n previewttl: 'معاينة',\r\n tablepropsttl: 'خصائص الجدول',\r\n tblwidth: 'العرض',\r\n tblcellspacing: 'تباعد الخلايا',\r\n tblcellpadding: 'حشو الخلايا',\r\n tblborder: 'عرض الحدود',\r\n tblalign: 'المحاذاة',\r\n tblalignleft: 'محاذاة الجدول لليسار',\r\n tblaligncenter: 'توسيط الجدول',\r\n tblalignright: 'محاذاة الجدول لليمين',\r\n alignnone: 'بدون',\r\n quote: 'اقتباس',\r\n link: 'رابط…',\r\n linkttl: 'إدراج/تعديل رابط',\r\n linkurl: 'الرابط',\r\n unlink: 'إزالة الرابط',\r\n lineheight: 'تباعد الأسطر',\r\n wordspacing: 'تباعد الكلمات',\r\n letterspacing: 'تباعد الأحرف',\r\n changecase: 'تغيير حالة الأحرف',\r\n lowercase: 'أحرف صغيرة',\r\n uppercase: 'أحرف كبيرة',\r\n capitalize: 'تكبير أول حرف',\r\n customcolor: 'لون مخصص…',\r\n normal: 'عادي',\r\n revhistory: 'سجل المراجعات',\r\n revempty: 'لا توجد مراجعات بعد',\r\n restore: 'استعادة',\r\n currentver: 'النسخة الحالية',\r\n importword: 'استيراد من Word…',\r\n importfail: 'تعذر استيراد هذا الملف. الرجاء اختيار مستند .docx صالح.',\r\n restoredraft: 'استعادة آخر مسودة',\r\n draftempty: 'لا توجد مسودة محفوظة',\r\n deleteimg: 'حذف الصورة',\r\n rotateleft: 'تدوير لليسار',\r\n rotateright: 'تدوير لليمين',\r\n fliphorizontal: 'قلب أفقي',\r\n flipvertical: 'قلب رأسي',\r\n cell: 'خلية',\r\n row: 'صف',\r\n column: 'عمود',\r\n cellprops: 'خصائص الخلية…',\r\n rowprops: 'خصائص الصف…',\r\n colprops: 'خصائص العمود…',\r\n tblheight: 'الارتفاع',\r\n valign: 'محاذاة عمودية',\r\n valigntop: 'أعلى',\r\n valignmiddle: 'وسط',\r\n valignbottom: 'أسفل',\r\n fill: 'تعبئة',\r\n nocell: 'انقر داخل خلية جدول أولاً',\r\n uploadimg: 'رفع من الجهاز',\r\n imagelink: 'إدراج من رابط',\r\n imageurlph: 'الصق رابط الصورة…',\r\n insertimg: 'إدراج',\r\n dropimage: 'أسقط الصورة هنا',\r\n uploading: 'جارٍ الرفع…',\r\n uploadfailed: 'فشل الرفع — انقر لإعادة المحاولة',\r\n template: 'قوالب',\r\n tplimgleft: 'صورة يسار، نص يمين',\r\n tplimgright: 'صورة يمين، نص يسار',\r\n tplimgtop: 'صورة أعلى، نص أسفل',\r\n tplimgcenter: 'نص أعلى، صورة وسط',\r\n deltemplate: 'حذف القالب',\r\n video: 'فيديو',\r\n quickvideo: 'إدراج فيديو',\r\n deletevideo: 'حذف الفيديو',\r\n uploadvideo: 'رفع من الجهاز',\r\n videolink: 'إدراج من رابط',\r\n videourlph: 'الصق رابط الفيديو…',\r\n insertvideo: 'إدراج',\r\n dropvideo: 'أسقط الفيديو هنا',\r\n videodlgttl: 'إدراج/تعديل فيديو',\r\n vidgeneral: 'عام',\r\n vidembed: 'تضمين',\r\n vidadvanced: 'متقدم',\r\n vidsource: 'المصدر',\r\n vidembedhint: 'الصق كود التضمين أدناه:',\r\n vidaltsource: 'رابط مصدر بديل',\r\n vidposter: 'صورة الغلاف (رابط الصورة)',\r\n emoji: 'رموز تعبيرية…',\r\n code: 'كود مضمّن',\r\n codesample: 'عينة كود…',\r\n codedlgttl: 'إدراج/تعديل عينة كود',\r\n codelang: 'اللغة',\r\n editcode: 'تعديل عينة الكود',\r\n deletecode: 'حذف عينة الكود',\r\n copycode: 'نسخ الكود',\r\n chcat_currency: 'عملات',\r\n chcat_text: 'نص وعلامات ترقيم',\r\n chcat_math: 'رموز رياضية',\r\n chcat_arrows: 'أسهم',\r\n chcat_symbols: 'رموز',\r\n chcat_latin: 'لاتينية موسعة',\r\n chcat_arabic: 'عربية',\r\n emcat_smileys: 'وجوه ومشاعر',\r\n emcat_people: 'أشخاص وإيماءات',\r\n emcat_animals: 'حيوانات وطبيعة',\r\n emcat_food: 'طعام وشراب',\r\n emcat_travel: 'سفر وأماكن',\r\n emcat_activities: 'أنشطة',\r\n emcat_objects: 'أشياء',\r\n emcat_symbols: 'رموز',\r\n emcat_flags: 'أعلام'\r\n }\r\n};\r\n\r\nexport function getStrings(lang: EditorLanguage): I18nStrings {\r\n return I18N[lang];\r\n}\r\n","/** Transcribed group-by-group from the editor's built-in toolbar layout so that\n * `toolbar: true` (the default) renders identically to the hard-coded original. */\nexport const DEFAULT_TOOLBAR =\n 'undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | ' +\n 'bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | ' +\n 'bullist numlist | outdent indent | link blockquote code changecase lineheight wordspacing letterspacing | removeformat | blocks | ' +\n 'ltr rtl | quickimage quickvideo quicktable codesample template charmap emoji | fullscreen sourcecode';\n\n/** Transcribed from the editor's built-in menu keys so that `menubar: true` (the\n * default) renders identically to the hard-coded original. */\nexport const DEFAULT_MENUBAR = 'file edit view insert format tools table help';\n\nexport const FONTS: [string, string][] = [\n ['Andale Mono', 'andale mono,times'],\n ['Arial', 'arial,helvetica,sans-serif'],\n ['Arial Black', 'arial black,avant garde'],\n ['Book Antiqua', 'book antiqua,palatino'],\n ['Comic Sans MS', 'comic sans ms,sans-serif'],\n ['Courier New', 'courier new,courier'],\n ['Georgia', 'georgia,palatino'],\n ['Helvetica', 'helvetica'],\n ['Impact', 'impact,chicago'],\n ['Oswald', 'oswald'],\n ['Sakkal Majalla', 'sakkal majalla'],\n ['Symbol', 'symbol'],\n ['Tahoma', 'tahoma,arial,helvetica,sans-serif'],\n ['Terminal', 'terminal,monaco'],\n ['Times New Roman', 'times new roman,times'],\n ['Trebuchet MS', 'trebuchet ms,geneva'],\n ['Verdana', 'verdana,geneva'],\n ['Webdings', 'webdings'],\n ['Wingdings', 'wingdings,zapf dingbats']\n];\n\nexport const SIZES = ['8px', '9px', '10px', '11px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '36px', '48px', '72px', '96px'];\n\nexport const MIN_FONT_PX = 1;\nexport const MAX_FONT_PX = 100;\n\nexport const LINE_HEIGHTS = ['1', '1.15', '1.4', '1.5', '1.75', '2', '2.5', '3'];\n\nexport const WORD_SPACINGS = ['1px', '2px', '4px', '6px', '8px', '12px'];\n\nexport const LETTER_SPACINGS = ['0.5px', '1px', '1.5px', '2px', '3px', '4px'];\n\n/** Languages offered by the code-sample dialog: [value stored in data-lang, label]. */\nexport const CODE_LANGS: [string, string][] = [\n ['plain', 'Plain text'],\n ['html', 'HTML/XML'],\n ['css', 'CSS'],\n ['javascript', 'JavaScript'],\n ['typescript', 'TypeScript'],\n ['json', 'JSON'],\n ['python', 'Python'],\n ['java', 'Java'],\n ['csharp', 'C#'],\n ['cpp', 'C/C++'],\n ['php', 'PHP'],\n ['ruby', 'Ruby'],\n ['go', 'Go'],\n ['rust', 'Rust'],\n ['sql', 'SQL'],\n ['bash', 'Bash/Shell']\n];\n\nexport const BLOCKS: [string, string][] = [\n ['p', 'para'],\n ['h1', 'heading1'],\n ['h2', 'heading2'],\n ['h3', 'heading3'],\n ['h4', 'heading4'],\n ['h5', 'heading5'],\n ['h6', 'heading6'],\n ['pre', 'pre']\n];\n\n/** Quick-access text color chips shown directly in the toolbar. */\nexport const QUICK_COLORS = ['#F76707', '#4263EB', '#CC5DE8'];\n\n/** 25 swatches — a 5×5 grid in the picker (pastels, brights, darks, grays,\n * then pink/brown/cyan + black/white). Shared by fore/back color and cell fill. */\nexport const COLORS = [\n '#FFFFFF',\n '#F4F4F4',\n '#E8EAED',\n '#DADCE0',\n '#000000',\n\n '#F28B82',\n '#FBBC04',\n '#FFF475',\n '#CCFF90',\n '#A7FFEB',\n\n '#CBF0F8',\n '#AECBFA',\n '#D7AEFB',\n '#FDCFE8',\n '#E6C9A8',\n\n '#EA4335',\n '#FB8C00',\n '#FDD835',\n '#34A853',\n '#00ACC1',\n\n '#4285F4',\n '#5E35B1',\n '#8E24AA',\n '#C2185B',\n '#6D4C41'\n];\n\n/** Category key = i18n string key for the tab label in the picker dialogs. */\nexport interface GlyphCategory {\n key: string;\n chars: string[];\n}\n\n/** Special-character map, grouped for the two-pane picker (tabs left, glyphs right).\n * `CHARS` below is the legacy flat list and is kept exported for back-compat. */\nexport const CHAR_CATEGORIES: GlyphCategory[] = [\n {\n key: 'chcat_currency',\n chars: [\n '€','£','¥','¢','$','₹','₽','₩','₺','₴','₦','฿','₫','₪','﷼','¤',\n '₡','₱','₲','₵','₭','₮','₸','₼','₾','₿'\n ]\n },\n {\n key: 'chcat_text',\n chars: [\n '§','¶','†','‡','•','…','′','″','‰','‱','–','—','―','¡','¿','·',\n '‹','›','«','»','“','”','‘','’','„','‚','¦','ª','º',\n '‽','※','❝','❞','❮','❯'\n ]\n },\n {\n key: 'chcat_math',\n chars: [\n '°','±','×','÷','≈','≠','≤','≥','∞','µ','√','∑','∫','∂','∆','∏',\n 'π','Ω','α','β','γ','δ','ε','θ','λ','σ','φ','ψ','ω',\n '∈','∉','∪','∩','⊂','⊃','⊆','⊇','∀','∃','∅','∝','∴','∵','¬','∧','∨',\n '½','⅓','¼','¾','⅔','⅛','⅜','⅝','⅞',\n '¹','²','³','⁴','⁵','⁶','⁷','⁸','⁹','⁰',\n '₁','₂','₃','₄','₅','₆','₇','₈','₉','₀'\n ]\n },\n {\n key: 'chcat_arrows',\n chars: [\n '←','→','↑','↓','↔','↕','⇐','⇒','⇑','⇓','⇔',\n '↖','↗','↘','↙','↩','↪','↺','↻',\n '⤴','⤵','➜','➝','➞','➟','⇦','⇨','⇧','⇩'\n ]\n },\n {\n key: 'chcat_symbols',\n chars: [\n '©','®','™','℠','№','℮',\n '✓','✔','✗','✘',\n '★','☆','✦','✪',\n '♠','♣','♥','♦',\n '♪','♫','♬',\n '☀','☁','☂','☃','☾',\n '☹','☺','☻',\n '✉','✂','✎','✏',\n '☎','☏','⌛','⌚',\n '☞','☜','☝','☟'\n ]\n },\n {\n key: 'chcat_latin',\n chars: [\n 'À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï',\n 'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß',\n 'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï',\n 'ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ',\n 'Œ','œ','Š','š','Ž','ž','Ł','ł'\n ]\n },\n {\n key: 'chcat_arabic',\n chars: [\n '؟','،','؛','٪','٭','ـ',\n '٠','١','٢','٣','٤','٥','٦','٧','٨','٩',\n '﴾','﴿','۞','؎',\n 'ء','آ','أ','ؤ','إ','ئ','ى','ة'\n ]\n }\n];\n\n/** Emoji map for the emoji picker — same two-pane dialog as the character map. */\nexport const EMOJI_CATEGORIES: GlyphCategory[] = [\n {\n key: 'emcat_smileys',\n chars: [\n '😀', '😃', '😄', '😁', '😆', '😅', '😂', '🤣', '😊', '😇', '🙂', '🙃', '😉', '😌', '😍', '🥰',\n '😘', '😋', '😛', '😜', '🤪', '🤨', '🧐', '🤓', '😎', '🥳', '😏', '😒', '😞', '😔', '😟', '😕',\n '🙁', '😣', '😫', '😩', '🥺', '😢', '😭', '😤', '😠', '😡', '🤯', '😳', '🥵', '🥶', '😱', '😨',\n '😥', '🤗', '🤔', '🤭', '🤫', '😐', '😑', '😬', '🙄', '😯', '😴', '😪', '😷', '🤒', '🤕', '🤢',\n '🤧', '😈', '💀', '👻', '👽', '🤖', '💩', '😺', '😸', '😹', '😻', '🙀'\n ]\n },\n {\n key: 'emcat_people',\n chars: [\n '👋', '🤚', '✋', '🖖', '👌', '🤏', '✌', '🤞', '🤟', '🤘', '🤙', '👈', '👉', '👆', '👇', '☝',\n '👍', '👎', '✊', '👊', '👏', '🙌', '👐', '🤲', '🤝', '🙏', '💪', '✍', '💅', '🤳', '👂', '👃',\n '👀', '👁', '🧠', '👶', '🧒', '👦', '👧', '🧑', '👨', '👩', '🧓', '👴', '👵', '👮', '👷', '💂',\n '🕵', '👸', '🤴', '👰', '🤵', '🤰', '👼', '🎅', '🦸', '🦹', '🧙', '🧚', '🧛', '🧟', '💃', '🕺',\n '🚶', '🏃', '🧘'\n ]\n },\n {\n key: 'emcat_animals',\n chars: [\n '🐶', '🐱', '🐭', '🐹', '🐰', '🦊', '🐻', '🐼', '🐨', '🐯', '🦁', '🐮', '🐷', '🐸', '🐵', '🐔',\n '🐧', '🐦', '🐤', '🦆', '🦅', '🦉', '🐺', '🐗', '🐴', '🦄', '🐝', '🐛', '🦋', '🐌', '🐞', '🐢',\n '🐍', '🦎', '🦖', '🐙', '🦑', '🦀', '🐠', '🐟', '🐬', '🐳', '🦈', '🐊', '🐅', '🦓', '🦍', '🐘',\n '🦏', '🐪', '🦒', '🦘', '🐄', '🐎', '🐖', '🐑', '🐐', '🦌', '🐕', '🐈', '🐓', '🦃', '🦚', '🦜',\n '🦢', '🕊', '🐇', '🦔', '🌵', '🌲', '🌴', '🌱', '🌿', '☘', '🍀', '🍁', '🌸', '🌺', '🌻', '🌹',\n '🌷', '💐'\n ]\n },\n {\n key: 'emcat_food',\n chars: [\n '🍏', '🍎', '🍐', '🍊', '🍋', '🍌', '🍉', '🍇', '🍓', '🍈', '🍒', '🍑', '🥭', '🍍', '🥥', '🥝',\n '🍅', '🍆', '🥑', '🥦', '🥒', '🌶', '🌽', '🥕', '🥔', '🥐', '🍞', '🥖', '🥨', '🧀', '🥚', '🍳',\n '🥞', '🥓', '🥩', '🍗', '🍖', '🌭', '🍔', '🍟', '🍕', '🥪', '🌮', '🌯', '🥗', '🍝', '🍜', '🍲',\n '🍛', '🍣', '🍱', '🥟', '🍤', '🍚', '🍧', '🍨', '🍦', '🥧', '🧁', '🍰', '🎂', '🍮', '🍭', '🍬',\n '🍫', '🍿', '🍩', '🍪', '🥜', '🍯', '🥛', '☕', '🍵', '🥤', '🍺', '🥂', '🍷', '🍸', '🍹'\n ]\n },\n {\n key: 'emcat_travel',\n chars: [\n '🚗', '🚕', '🚙', '🚌', '🏎', '🚓', '🚑', '🚒', '🚚', '🚜', '🛵', '🏍', '🚲', '🛴', '🚔', '🚃',\n '🚄', '🚅', '🚂', '🚆', '🚇', '🚉', '✈', '🛫', '🛬', '💺', '🚁', '🚀', '🛸', '🚢', '⛵', '🚤',\n '⚓', '⛽', '🚧', '🗺', '🗿', '🗽', '🗼', '🏰', '🏯', '🎡', '🎢', '🎠', '⛲', '🏖', '🏝', '🌋',\n '⛰', '🏔', '🗻', '🏕', '⛺', '🏠', '🏡', '🏢', '🏬', '🏥', '🏦', '🏨', '🏪', '🏫', '💒', '⛪',\n '🕌', '🕍', '🕋', '⛩', '🌅', '🌄', '🌇', '🌆', '🌃', '🌉', '🌌', '🌠'\n ]\n },\n {\n key: 'emcat_activities',\n chars: [\n '⚽', '🏀', '🏈', '⚾', '🎾', '🏐', '🏉', '🎱', '🏓', '🏸', '🏒', '🏑', '🏏', '⛳', '🏹', '🎣',\n '🥊', '🥋', '⛸', '🎿', '⛷', '🏂', '🏋', '🤸', '⛹', '🤺', '🏇', '🧗', '🏄', '🏊', '🚣', '🚵',\n '🚴', '🏆', '🥇', '🥈', '🥉', '🏅', '🎖', '🎫', '🎪', '🤹', '🎭', '🎨', '🎬', '🎤', '🎧', '🎼',\n '🎹', '🥁', '🎷', '🎺', '🎸', '🎻', '🎲', '🎯', '🎳', '🎮', '🎰', '🧩'\n ]\n },\n {\n key: 'emcat_objects',\n chars: [\n '⌚', '📱', '💻', '⌨', '🖥', '🖨', '🖱', '🕹', '💽', '💾', '💿', '📀', '📷', '📸', '📹', '🎥',\n '📞', '☎', '📺', '📻', '🎙', '⏱', '⏰', '⌛', '⏳', '📡', '🔋', '🔌', '💡', '🔦', '🕯', '💸',\n '💵', '💰', '💳', '💎', '⚖', '🔧', '🔨', '⚒', '🛠', '⛏', '🔩', '⚙', '🧲', '🔫', '💣', '🔪',\n '🛡', '🔮', '🧿', '🔭', '🔬', '💊', '💉', '🌡', '🧬', '🧪', '🧹', '🧺', '🛁', '🔑', '🗝', '🚪',\n '🛋', '🛏', '🧸', '🖼', '🛍', '🛒', '🎁', '🎈', '🎀', '🎊', '🎉', '✉', '📩', '📦', '📜', '📄',\n '📊', '📈', '📉', '📅', '📋', '📁', '📰', '📓', '📚', '📖', '🔖', '🔗', '📎', '📐', '📏', '📌',\n '📍', '✂', '🖊', '✒', '🖌', '🖍', '📝', '✏', '🔍', '🔒', '🔓'\n ]\n },\n {\n key: 'emcat_symbols',\n chars: [\n '❤', '🧡', '💛', '💚', '💙', '💜', '🖤', '💔', '❣', '💕', '💞', '💓', '💗', '💖', '💘', '💝',\n '☮', '✝', '☪', '🕉', '☸', '✡', '☯', '♈', '♉', '♊', '♋', '♌', '♍', '♎', '♏', '♐',\n '♑', '♒', '♓', '⚛', '❌', '⭕', '🛑', '⛔', '🚫', '💯', '💢', '⚠', '🚸', '🔱', '⚜', '🔰',\n '♻', '✅', '❇', '✳', '❎', '🌐', '💠', '🌀', '💤', '🏧', '♿', '🚭', '❗', '❕', '❓', '❔',\n '‼', '⁉', '💲', '🔅', '🔆', '〽', 'ℹ', '🆗', '🆕', '🆓', '🆒', '🆙', '🈯', '🈚'\n ]\n },\n {\n key: 'emcat_flags',\n chars: [\n '🏁', '🚩', '🎌', '🏴', '🏳', '🇦🇪', '🇸🇦', '🇶🇦', '🇰🇼', '🇧🇭', '🇴🇲', '🇪🇬', '🇯🇴', '🇱🇧', '🇮🇳', '🇵🇰',\n '🇺🇸', '🇬🇧', '🇨🇦', '🇦🇺', '🇫🇷', '🇩🇪', '🇮🇹', '🇪🇸', '🇵🇹', '🇳🇱', '🇧🇪', '🇨🇭', '🇸🇪', '🇳🇴', '🇩🇰', '🇫🇮',\n '🇮🇪', '🇬🇷', '🇹🇷', '🇷🇺', '🇺🇦', '🇵🇱', '🇯🇵', '🇰🇷', '🇨🇳', '🇸🇬', '🇲🇾', '🇮🇩', '🇹🇭', '🇵🇭', '🇻🇳', '🇧🇷',\n '🇦🇷', '🇲🇽', '🇿🇦', '🇳🇬', '🇰🇪', '🇲🇦'\n ]\n }\n];\n\nexport const CHARS = [\n '©',\n '®',\n '™',\n '§',\n '¶',\n '†',\n '‡',\n '•',\n '…',\n '′',\n '″',\n '‰',\n '°',\n '±',\n '×',\n '÷',\n '≈',\n '≠',\n '≤',\n '≥',\n '∞',\n 'µ',\n '√',\n '∑',\n '€',\n '£',\n '¥',\n '¢',\n '←',\n '→',\n '↑',\n '↓',\n '«',\n '»',\n '“',\n '”',\n '‘',\n '’',\n '–',\n '—',\n '؟',\n '،',\n '؛',\n '٪',\n '٭',\n 'ـ',\n '٠',\n '١'\n];\n","const S = (inner: string, vb?: string) => `<svg viewBox=\"${vb || '0 0 24 24'}\">${inner}</svg>`;\n\n/** Google Material Symbols icon: solid-fill path on the -960..0/0..960 grid those exports use. */\nconst G = (path: string) => S(`<path class=\"f\" d=\"${path}\"/>`, '0 -960 960 960');\n\n/** Three-line list icon with custom markers (text glyphs) per line. */\nconst LIST = (marks: [string, string, string], fs = 7.5) =>\n S(\n '<path d=\"M10 6h10M10 12h10M10 18h10\"/>' +\n marks\n .map(\n (m, i) =>\n `<text x=\"2.5\" y=\"${8.4 + i * 6}\" font-size=\"${fs}\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\">${m}</text>`\n )\n .join('')\n );\n\nexport const IC: Record<string, string> = {\n bold: G(\n 'M272-200v-560h221q65 0 120 40t55 111q0 51-23 78.5T602-491q25 11 55.5 41t30.5 90q0 89-65 124.5T501-200H272Zm121-112h104q48 0 58.5-24.5T566-372q0-11-10.5-35.5T494-432H393v120Zm0-228h93q33 0 48-17t15-38q0-24-17-39t-44-15h-95v109Z'\n ),\n italic: G('M200-200v-100h160l120-360H320v-100h400v100H580L460-300h140v100H200Z'),\n underline: G(\n 'M200-120v-80h560v80H200Zm123-223q-56-63-56-167v-330h103v336q0 56 28 91t82 35q54 0 82-35t28-91v-336h103v330q0 104-56 167t-157 63q-101 0-157-63Z'\n ),\n strikethrough: G(\n 'M486-160q-76 0-135-45t-85-123l88-38q14 48 48.5 79t85.5 31q42 0 76-20t34-64q0-18-7-33t-19-27h112q5 14 7.5 28.5T694-340q0 86-61.5 133T486-160ZM80-480v-80h800v80H80Zm402-326q66 0 115.5 32.5T674-674l-88 39q-9-29-33.5-52T484-710q-41 0-68 18.5T386-640h-96q2-69 54.5-117.5T482-806Z'\n ),\n undo: G('M280-200v-80h284q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l104 104-56 56-200-200 200-200 56 56-104 104h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H280Z'),\n redo: G('M396-200q-97 0-166.5-63T160-420q0-94 69.5-157T396-640h252L544-744l56-56 200 200-200 200-56-56 104-104H396q-63 0-109.5 40T240-420q0 60 46.5 100T396-280h284v80H396Z'),\n ltr: G(\n 'M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm0-280v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80ZM680-80l-56-56 64-64H120v-80h568l-64-64 56-56 160 160L680-80Z'\n ),\n rtl: G(\n 'M360-360v-200q-66 0-113-47t-47-113q0-66 47-113t113-47h320v80h-80v440h-80v-440h-80v440h-80Zm-88 160 64 64-56 56-160-160 160-160 56 56-64 64h568v80H272Zm88-440v-160q-33 0-56.5 23.5T280-720q0 33 23.5 56.5T360-640Zm0-80Z'\n ),\n alignleft: G(\n 'M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z'\n ),\n aligncenter: G(\n 'M120-120v-80h720v80H120Zm160-160v-80h400v80H280ZM120-440v-80h720v80H120Zm160-160v-80h400v80H280ZM120-760v-80h720v80H120Z'\n ),\n alignright: G(\n 'M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z'\n ),\n alignjustify: G(\n 'M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z'\n ),\n fullscreen: G(\n 'M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z'\n ),\n clearformatic: G(\n 'm528-546-93-93-121-121h486v120H568l-40 94ZM792-56 460-388l-80 188H249l119-280L56-792l56-56 736 736-56 56Z'\n ),\n numlist: G(\n 'M120-80v-60h100v-30h-60v-60h60v-30H120v-60h120q17 0 28.5 11.5T280-280v40q0 17-11.5 28.5T240-200q17 0 28.5 11.5T280-160v40q0 17-11.5 28.5T240-80H120Zm0-280v-110q0-17 11.5-28.5T160-510h60v-30H120v-60h120q17 0 28.5 11.5T280-560v70q0 17-11.5 28.5T240-450h-60v30h100v60H120Zm60-280v-180h-60v-60h120v240h-60Zm180 440v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360Z'\n ),\n bullist: G(\n 'M360-200v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm-56.5-263.5Q120-687 120-720t23.5-56.5Q167-800 200-800t56.5 23.5Q280-753 280-720t-23.5 56.5Q233-640 200-640t-56.5-23.5Z'\n ),\n chev: S('<path d=\"M2 3.5 6 7.5 10 3.5\"/>', '0 0 12 11'),\n backcolor: G(\n 'M440-80q-33 0-56.5-23.5T360-160v-160H240q-33 0-56.5-23.5T160-400v-280q0-66 47-113t113-47h480v440q0 33-23.5 56.5T720-320H600v160q0 33-23.5 56.5T520-80h-80ZM240-560h480v-200h-40v160h-80v-160h-40v80h-80v-80H320q-33 0-56.5 23.5T240-680v120Zm0 160h480v-80H240v80Zm0 0v-80 80Z'\n ),\n outdent: G(\n 'M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm160 440L120-480l160-160v320Z'\n ),\n indent: G(\n 'M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm0 440v-320l160 160-160 160Z'\n ),\n more: S(\n '<circle class=\"f\" cx=\"5\" cy=\"12\" r=\"1.7\"/><circle class=\"f\" cx=\"12\" cy=\"12\" r=\"1.7\"/><circle class=\"f\" cx=\"19\" cy=\"12\" r=\"1.7\"/>'\n ),\n image: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z'\n ),\n uploadic: G(\n 'M440-200v-326L336-422l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Z'\n ),\n tableic: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm240-240H200v160h240v-160Zm80 0v160h240v-160H520Zm-80-80v-160H200v160h240Zm80 0h240v-160H520v160ZM200-680h560v-80H200v80Z'\n ),\n hric: S('<path d=\"M4 12h16\"/>'),\n charic: G(\n 'M120-120v-120h200q-84-45-132-125t-48-175q0-142 99-241t241-99q142 0 241 99t99 241q0 95-48 175T640-240h200v120H520v-204q78-14 129-75t51-141q0-92-64-156t-156-64q-92 0-156 64t-64 156q0 80 51 141t129 75v204H120Z'\n ),\n dateic: S(\n '<rect x=\"4\" y=\"6\" width=\"16\" height=\"14\" rx=\"1.5\"/><path d=\"M4 10h16M8 4v4M16 4v4\"/>'\n ),\n pbic: G(\n 'M240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Zm-80-440v-280q0-33 23.5-56.5T240-880h320l240 240v120h-80v-80H520v-200H240v280h-80Zm200 160v-80h240v80H360Zm320 0v-80h240v80H680Zm-640 0v-80h240v80H40Zm440-160Zm0 240Z'\n ),\n nbspic: S('<path d=\"M6 12v4h12v-4\"/>'),\n srcic: G(\n 'M240-280 40-480l200-200 56 56-143 144 143 144-56 56Zm178 132-76-24 200-640 76 24-200 640Zm302-132-56-56 143-144-143-144 56-56 200 200-200 200Z'\n ),\n prevw: G(\n 'M607.5-372.5Q660-425 660-500t-52.5-127.5Q555-680 480-680t-127.5 52.5Q300-575 300-500t52.5 127.5Q405-320 480-320t127.5-52.5Zm-204-51Q372-455 372-500t31.5-76.5Q435-608 480-608t76.5 31.5Q588-545 588-500t-31.5 76.5Q525-392 480-392t-76.5-31.5ZM214-281.5Q94-363 40-500q54-137 174-218.5T480-800q146 0 266 81.5T920-500q-54 137-174 218.5T480-200q-146 0-266-81.5ZM480-500Zm207.5 160.5Q782-399 832-500q-50-101-144.5-160.5T480-720q-113 0-207.5 59.5T128-500q50 101 144.5 160.5T480-280q113 0 207.5-59.5Z'\n ),\n printic: G(\n 'M640-640v-120H320v120h-80v-200h480v200h-80Zm-480 80h640-640Zm560 100q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460Zm-80 260v-160H320v160h320Zm80 80H240v-160H80v-240q0-51 35-85.5t85-34.5h560q51 0 85.5 34.5T880-520v240H720v160Zm80-240v-160q0-17-11.5-28.5T760-560H200q-17 0-28.5 11.5T160-520v160h80v-80h480v80h80Z'\n ),\n cutic: G(\n 'M760-120 480-400l-94 94q8 15 11 32t3 34q0 66-47 113T240-80q-66 0-113-47T80-240q0-66 47-113t113-47q17 0 34 3t32 11l94-94-94-94q-15 8-32 11t-34 3q-66 0-113-47T80-720q0-66 47-113t113-47q66 0 113 47t47 113q0 17-3 34t-11 32l494 494v40H760ZM600-520l-80-80 240-240h120v40L600-520ZM296.5-663.5Q320-687 320-720t-23.5-56.5Q273-800 240-800t-56.5 23.5Q160-753 160-720t23.5 56.5Q207-640 240-640t56.5-23.5ZM494-466q6-6 6-14t-6-14q-6-6-14-6t-14 6q-6 6-6 14t6 14q6 6 14 6t14-6ZM296.5-183.5Q320-207 320-240t-23.5-56.5Q273-320 240-320t-56.5 23.5Q160-273 160-240t23.5 56.5Q207-160 240-160t56.5-23.5Z'\n ),\n copyic: G(\n 'M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z'\n ),\n pasteic: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h167q11-35 43-57.5t70-22.5q40 0 71.5 22.5T594-840h166q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560h-80v120H280v-120h-80v560Zm308.5-571.5Q520-783 520-800t-11.5-28.5Q497-840 480-840t-28.5 11.5Q440-817 440-800t11.5 28.5Q463-760 480-760t28.5-11.5Z'\n ),\n selall: G(\n 'M280-280v-400h400v400H280Zm80-80h240v-240H360v240ZM200-200v80q-33 0-56.5-23.5T120-200h80Zm-80-80v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm80-160h-80q0-33 23.5-56.5T200-840v80Zm80 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80v80h-80Zm0-640v-80h80v80h-80Zm160 640v-80h80q0 33-23.5 56.5T760-120Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80h80v80h-80Zm0-160v-80q33 0 56.5 23.5T840-760h-80Z'\n ),\n superscriptic: G(\n 'M760-600v-80q0-17 11.5-28.5T800-720h80v-40H760v-40h120q17 0 28.5 11.5T920-760v40q0 17-11.5 28.5T880-680h-80v40h120v40H760ZM235-160l185-291-172-269h106l124 200h4l123-200h107L539-451l186 291H618L482-377h-4L342-160H235Z'\n ),\n subscriptic: G(\n 'M760-160v-80q0-17 11.5-28.5T800-280h80v-40H760v-40h120q17 0 28.5 11.5T920-320v40q0 17-11.5 28.5T880-240h-80v40h120v40H760Zm-525-80 185-291-172-269h106l124 200h4l123-200h107L539-531l186 291H618L482-457h-4L342-240H235Z'\n ),\n newic: S('<path d=\"M6 3h8l5 5v13H6z\"/><path d=\"M14 3v5h5\"/>'),\n helpic: S(\n '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M9.6 9.6a2.5 2.5 0 1 1 3.4 2.6c-.8.3-1 .9-1 1.8\"/><circle class=\"f\" cx=\"12\" cy=\"16.6\" r=\"1.1\"/>'\n ),\n wcic: S('<path d=\"M4 6h16M4 10h16M4 14h9\"/><path d=\"M15 17.5l2 2 3.6-4\"/>'),\n rowbefore: G(\n 'M200-160h560v-240H200v240Zm640 80H120v-720h160v80h-80v240h560v-240h-80v-80h160v720ZM480-480Zm0 80v-80 80Zm0 0Zm-40-240v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n rowafter: G(\n 'M200-560h560v-240H200v240Zm-80 400v-720h720v720H680v-80h80v-240H200v240h80v80H120Zm360-320Zm0-80v80-80Zm0 0ZM440-80v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n rowdelete: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM200-400v-160h560v160H200ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z'\n ),\n colbefore: G(\n 'M800-200v-560H560v560h240Zm-640 80v-160h80v80h240v-560H240v80h-80v-160h720v720H160Zm320-360Zm80 0h-80 80Zm0 0ZM160-360v-80H80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n colafter: G(\n 'M160-760v560h240v-560H160ZM80-120v-720h720v160h-80v-80H480v560h240v-80h80v160H80Zm400-360Zm-80 0h80-80Zm0 0Zm320 120v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z'\n ),\n coldelete: G(\n 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200ZM200-200h560v-560H200ZM400-200v-560h160v560H400ZM330-580l250 250 50-50-250-250ZM330-380l250-250 50 50-250 250Z'\n ),\n tabledelete: S(\n '<rect x=\"4\" y=\"5\" width=\"16\" height=\"14\" rx=\"1.5\"/><path d=\"M4 10h16M4 14.5h16M9.5 5v14M14.5 5v14\"/><path d=\"M6.5 6.5l11 11M17.5 6.5l-11 11\" stroke-width=\"2.1\"/>'\n ),\n quote: G(\n 'm228-240 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T458-480L320-240h-92Zm360 0 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T818-480L680-240h-92ZM362.5-517.5Q380-535 380-560t-17.5-42.5Q345-620 320-620t-42.5 17.5Q260-585 260-560t17.5 42.5Q295-500 320-500t42.5-17.5Zm360 0Q740-535 740-560t-17.5-42.5Q705-620 680-620t-42.5 17.5Q620-585 620-560t17.5 42.5Q655-500 680-500t42.5-17.5ZM680-560Zm-360 0Z'\n ),\n link: G(\n 'M440-280H280q-83 0-141.5-58.5T80-480q0-83 58.5-141.5T280-680h160v80H280q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h320v80H320Zm200 160v-80h160q50 0 85-35t35-85q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 83-58.5 141.5T680-280H520Z'\n ),\n unlink: S(\n '<path d=\"M13.5 6.5l1.7-1.7a4 4 0 0 1 5.6 5.6L19 12.2\"/><path d=\"M10.5 17.5l-1.7 1.7a4 4 0 0 1-5.6-5.6L5 11.8\"/><path d=\"M4 4l16 16\"/>'\n ),\n lineheight: G(\n 'M240-160 80-320l56-56 64 62v-332l-64 62-56-56 160-160 160 160-56 56-64-62v332l64-62 56 56-160 160Zm240-40v-80h400v80H480Zm0-240v-80h400v80H480Zm0-240v-80h400v80H480Z'\n ),\n wordspacing: G(\n 'M320-80 160-240l160-160 57 56-64 64h334l-63-64 56-56 160 160L640-80l-57-56 64-64H313l63 64-56 56ZM200-480v-400h80v400h-80Zm240 0v-400h80v400h-80Zm240 0v-400h80v400h-80Z'\n ),\n caseic: G(\n 'm131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z'\n ),\n uppercaseic: G(\n 'M660-240v-248l-64 64-56-56 160-160 160 160-56 56-64-64v248h-80Zm-540 0 165-440h79l165 440h-76l-39-113H236l-40 113h-76Zm139-177h131l-65-182h-4l-62 182Z'\n ),\n lowercaseic: G(\n 'M300-240q-51 0-81-27.5T189-340q0-44 34.5-72.5T312-441q23 0 45 4t38 11v-12q0-29-20.5-47T320-503q-23 0-42 9.5T245-466l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T324-391q-32 0-50 14t-18 37q0 20 16 33t40 13Zm388 54L540-400l56-56 64 64v-248h80v248l64-64 56 56-160 160Z'\n ),\n capitalizeic: G(\n 'M344-250v-366H224v-64h308v64H412v366h-68Zm344 10q-44 0-69-25.5T594-336v-162h-54v-58h54v-87h66v87h74v58h-74v148q0 23 10.5 36t28.5 13q9 0 18.5-3.5T736-314v65q-10 5-22 7t-26 2Z'\n ),\n plus: S('<path d=\"M12 5.5v13M5.5 12h13\"/>'),\n minus: S('<path d=\"M5.5 12h13\"/>'),\n fontsizeup: G(\n 'm40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z'\n ),\n fontsizedown: G(\n 'm40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z'\n ),\n historyic: G(\n 'M480-120q-138 0-240.5-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm112-192L440-464v-216h80v184l128 128-56 56Z'\n ),\n wordic: S(\n '<path d=\"M6 3h8l5 5v13H6z\"/><path d=\"M14 3v5h5\"/><text x=\"8\" y=\"17\" font-size=\"8.5\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">W</text>'\n ),\n draftic: G(\n 'M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z'\n ),\n trash: S(\n '<path d=\"M5 7h14M10 7V5h4v2M7.5 7l1 13h7l1-13\"/>'\n ),\n templateic: S(\n '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"1.5\"/><rect x=\"6.5\" y=\"6.5\" width=\"5\" height=\"5\" rx=\".5\"/><path d=\"M14 7.5h3.5M14 10h3.5M6.5 14h11M6.5 17h11\"/>'\n ),\n tplleft: S(\n '<rect x=\"3\" y=\"5\" width=\"8\" height=\"8\" rx=\".8\"/><path d=\"M13.5 6.5H21M13.5 9.5H21M13.5 12.5H21M3 15.5h18M3 18.5h18\"/>'\n ),\n tplright: S(\n '<rect x=\"13\" y=\"5\" width=\"8\" height=\"8\" rx=\".8\"/><path d=\"M3 6.5h7.5M3 9.5h7.5M3 12.5h7.5M3 15.5h18M3 18.5h18\"/>'\n ),\n tpltop: S(\n '<rect x=\"5\" y=\"3\" width=\"14\" height=\"9\" rx=\".8\"/><path d=\"M3 15h18M3 18h18M3 21h12\"/>'\n ),\n tplcenter: S(\n '<path d=\"M3 4h18M3 7h18M3 10h12\"/><rect x=\"5\" y=\"12.5\" width=\"14\" height=\"9\" rx=\".8\"/>'\n ),\n rotateleft: S(\n '<polyline points=\"1 4 1 10 7 10\"/><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"/>'\n ),\n rotateright: S(\n '<polyline points=\"23 4 23 10 17 10\"/><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"/>'\n ),\n fliphorizontal: S(\n '<path d=\"M12 3v18\"/><path d=\"M7 8l-4 4 4 4\"/><path d=\"M17 8l4 4-4 4\"/>'\n ),\n flipvertical: S(\n '<path d=\"M3 12h18\"/><path d=\"M8 7l4-4 4 4\"/><path d=\"M8 17l4 4 4-4\"/>'\n ),\n check: S('<path d=\"M5 12.5 9.5 17 19 7\"/>'),\n palette: S(\n '<path d=\"M12 3a9 9 0 1 0 0 18h1.2a2 2 0 0 0 2-2 2 2 0 0 1 2-2H18a3 3 0 0 0 3-3c0-6.1-4.5-11-9-11z\"/><circle class=\"f\" cx=\"7.8\" cy=\"10.2\" r=\"1.3\"/><circle class=\"f\" cx=\"11.6\" cy=\"7.3\" r=\"1.3\"/><circle class=\"f\" cx=\"15.8\" cy=\"9.6\" r=\"1.3\"/><circle class=\"f\" cx=\"9\" cy=\"14.8\" r=\"1.3\"/>'\n ),\n ul_circle: G(\n 'M280-600v-80h560v80H280Zm0 160v-80h560v80H280Zm0 160v-80h560v80H280ZM160-600q-17 0-28.5-11.5T120-640q0-17 11.5-28.5T160-680q17 0 28.5 11.5T200-640q0 17-11.5 28.5T160-600Zm0 160q-17 0-28.5-11.5T120-480q0-17 11.5-28.5T160-520q17 0 28.5 11.5T200-480q0 17-11.5 28.5T160-440Zm0 160q-17 0-28.5-11.5T120-320q0-17 11.5-28.5T160-360q17 0 28.5 11.5T200-320q0 17-11.5 28.5T160-280Z'\n ),\n ul_square: G(\n 'M80-160v-160h160v160H80Zm240 0v-160h560v160H320ZM80-400v-160h160v160H80Zm240 0v-160h560v160H320ZM80-640v-160h160v160H80Zm240 0v-160h560v160H320Z'\n ),\n ol_alpha: LIST(['a', 'b', 'c']),\n ol_roman: LIST(['i', 'ii', 'iii'], 6.5),\n ol_alphau: LIST(['A', 'B', 'C']),\n ol_romanu: LIST(['I', 'II', 'III'], 6.5),\n video: S('<rect x=\"3\" y=\"6\" width=\"13\" height=\"12\" rx=\"1.5\"/><path d=\"M16 10l5-3v10l-5-3z\"/>'),\n editic: S('<path d=\"M4 20l1-4.5L15.5 5 19 8.5 8.5 19 4 20z\"/><path d=\"M13.5 6.5l4 4\"/>'),\n letterspacing: S(\n '<text x=\"2.5\" y=\"13\" font-size=\"12\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">A</text><text x=\"13\" y=\"13\" font-size=\"12\" stroke=\"none\" fill=\"#222f3e\" font-family=\"Arial\" font-weight=\"bold\">B</text><path d=\"M7 18.5h10\"/><path class=\"f\" d=\"M7.5 18.5 4.5 16.6v3.8z\"/><path class=\"f\" d=\"M16.5 18.5l3-1.9v3.8z\"/>'\n ),\n emojiic: S(\n '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M8.6 14.3a4.6 4.6 0 0 0 6.8 0\"/><path d=\"M9.2 9.6v.7M14.8 9.6v.7\"/>'\n ),\n inlinecodeic: S('<path d=\"M8.5 8 4.5 12l4 4M15.5 8l4 4-4 4\"/><path d=\"M13 6l-2 12\"/>'),\n moverowup: S('<rect x=\"4\" y=\"15.5\" width=\"16\" height=\"5\" rx=\"1\"/><path d=\"M12 12.5V4M8.5 7.5 12 4l3.5 3.5\"/>'),\n moverowdown: S('<rect x=\"4\" y=\"3.5\" width=\"16\" height=\"5\" rx=\"1\"/><path d=\"M12 11.5V20M8.5 16.5 12 20l3.5-3.5\"/>'),\n movecolleft: S('<rect x=\"15.5\" y=\"4\" width=\"5\" height=\"16\" rx=\"1\"/><path d=\"M12.5 12H4M7.5 8.5 4 12l3.5 3.5\"/>'),\n movecolright: S('<rect x=\"3.5\" y=\"4\" width=\"5\" height=\"16\" rx=\"1\"/><path d=\"M11.5 12H20M16.5 8.5 20 12l-3.5 3.5\"/>'),\n codesampleic: S(\n '<rect x=\"3.5\" y=\"4\" width=\"17\" height=\"16\" rx=\"2\"/><path d=\"M3.5 8.5h17\"/><path d=\"M9.5 12 7 14.25l2.5 2.25M14.5 12l2.5 2.25-2.5 2.25\"/>'\n )\n};\n\nexport const TXT = (html: string) => `<span class=\"txt\">${html}</span>`;\n","const ALLOWED_TAGS = new Set([\n 'p',\n 'div',\n 'span',\n 'br',\n 'hr',\n 'a',\n 'b',\n 'strong',\n 'i',\n 'em',\n 'u',\n 's',\n 'strike',\n 'sub',\n 'sup',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'code',\n 'ul',\n 'ol',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'tr',\n 'td',\n 'th',\n 'caption',\n 'colgroup',\n 'col',\n 'img',\n 'figure',\n 'figcaption',\n 'mark'\n]);\n\nconst ALLOWED_STYLES = new Set([\n 'text-align',\n 'direction',\n 'unicode-bidi',\n 'font-weight',\n 'font-style',\n 'text-decoration',\n 'text-decoration-line',\n 'color',\n 'background-color',\n 'background',\n 'background-image',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'font-size',\n 'font-family',\n 'line-height',\n 'letter-spacing',\n 'vertical-align',\n 'text-indent',\n 'margin',\n 'margin-top',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-inline-start',\n 'margin-inline-end',\n 'padding',\n 'padding-top',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'width',\n 'height',\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height',\n 'border',\n 'border-top',\n 'border-right',\n 'border-bottom',\n 'border-left',\n 'border-color',\n 'border-style',\n 'border-width',\n 'border-radius',\n 'border-collapse',\n 'border-spacing',\n 'table-layout',\n 'float',\n 'display',\n 'box-sizing',\n 'list-style-type',\n 'white-space'\n]);\n\nconst ALLOWED_ATTRS: Record<string, string[]> = {\n '*': ['dir', 'lang', 'colspan', 'rowspan'],\n a: ['href', 'target', 'rel', 'title'],\n img: ['src', 'alt', 'width', 'height', 'title'],\n col: ['span', 'width'],\n td: ['width', 'valign'],\n th: ['width', 'valign'],\n table: ['width', 'cellpadding', 'cellspacing']\n};\n\nexport interface StyleMap {\n [key: string]: string;\n}\n\nexport function styleMap(el: Element): StyleMap {\n const map: StyleMap = {};\n const raw = el.getAttribute && el.getAttribute('style');\n if (!raw) return map;\n raw.split(';').forEach((p) => {\n const i = p.indexOf(':');\n if (i < 1) return;\n map[p.slice(0, i).trim().toLowerCase()] = p.slice(i + 1).trim();\n });\n return map;\n}\n\nfunction preClean(html: string): string {\n return html\n .replace(/<!--\\[if !supportLists\\]-->([\\s\\S]*?)<!--\\[endif\\]-->/gi, '$1')\n .replace(/<!--\\[if !supportLists\\]>([\\s\\S]*?)<!\\[endif\\]-->/gi, '$1')\n .replace(/<!\\[if !supportLists\\]>([\\s\\S]*?)<!\\[endif\\]>/gi, '$1')\n .replace(/<!--\\[if [\\s\\S]*?<!\\[endif\\]-->/gi, '')\n .replace(/<!--[\\s\\S]*?-->/g, '')\n .replace(/<(script|style|xml|title)[\\s\\S]*?<\\/\\1>/gi, '')\n .replace(/<\\/?(meta|link)[^>]*>/gi, '')\n .replace(/<\\?xml[\\s\\S]*?\\?>/gi, '')\n .replace(/<\\/?(o|v|w|m|st1):[^>]*>/gi, '');\n}\n\ninterface MarkerInfo {\n ordered: boolean;\n style?: string;\n}\n\nfunction markerType(mt: string): MarkerInfo {\n if (/^[0-9]+[\\.\\)،]/.test(mt)) return { ordered: true };\n if (/^[٠-٩۰-۹]+/.test(mt)) return { ordered: true, style: 'arabic-indic' };\n if (/^[ivxlc]{2,}[\\.\\)]/.test(mt)) return { ordered: true, style: 'lower-roman' };\n if (/^[IVXLC]{2,}[\\.\\)]/.test(mt)) return { ordered: true, style: 'upper-roman' };\n if (/^[a-z][\\.\\)]/.test(mt)) return { ordered: true, style: 'lower-alpha' };\n if (/^[A-Z][\\.\\)]/.test(mt)) return { ordered: true, style: 'upper-alpha' };\n if (/^[ء-ي][\\.\\)،-]/.test(mt)) return { ordered: true, style: 'arabic-indic' };\n return { ordered: false };\n}\n\nfunction rebuildWordLists(doc: Document): void {\n const isListP = (p: Element) => {\n const s = (p.getAttribute('style') || '') + ' ' + (p.className || '');\n return /mso-list\\s*:(?!\\s*ignore)/i.test(s) || /MsoListParagraph/i.test(s);\n };\n const groups: HTMLParagraphElement[][] = [];\n let cur: HTMLParagraphElement[] | null = null;\n Array.from(doc.body.querySelectorAll('p')).forEach((p) => {\n if (!isListP(p)) {\n cur = null;\n return;\n }\n const prev = p.previousElementSibling;\n if (cur && prev && cur[cur.length - 1] === prev) cur.push(p);\n else {\n cur = [p];\n groups.push(cur);\n }\n });\n groups.forEach((group) => {\n const stack: { list: HTMLOListElement | HTMLUListElement; level: number }[] = [];\n const rootAnchor = group[0];\n group.forEach((p) => {\n const style = p.getAttribute('style') || '';\n const level = +(style.match(/level(\\d+)/i)?.[1] || 1);\n const marker = Array.from(p.querySelectorAll('span')).find((sp) =>\n /mso-list\\s*:\\s*ignore/i.test(sp.getAttribute('style') || '')\n );\n const mt = marker\n ? marker.textContent?.trim() || ''\n : (p.textContent?.trim().match(/^\\S{1,4}/) || [''])[0];\n const { ordered, style: listStyle } = markerType(mt);\n if (marker) marker.remove();\n while (stack.length && stack[stack.length - 1].level > level) stack.pop();\n if (!stack.length || stack[stack.length - 1].level < level) {\n const list = doc.createElement(ordered ? 'ol' : 'ul');\n if (ordered && listStyle) list.style.listStyleType = listStyle;\n if (stack.length) {\n const par = stack[stack.length - 1].list;\n (par.lastElementChild || par).appendChild(list);\n } else {\n rootAnchor.parentNode!.insertBefore(list, rootAnchor);\n }\n stack.push({ list, level });\n }\n const li = doc.createElement('li');\n const keep = styleMap(p);\n const kept = ['text-align', 'direction', 'unicode-bidi', 'color', 'font-size', 'font-family', 'background-color']\n .filter((k) => keep[k])\n .map((k) => k + ':' + keep[k])\n .join(';');\n if (kept) li.setAttribute('style', kept);\n if (p.getAttribute('dir')) li.setAttribute('dir', p.getAttribute('dir')!);\n while (p.firstChild) li.appendChild(p.firstChild);\n stack[stack.length - 1].list.appendChild(li);\n p.remove();\n });\n });\n}\n\nfunction fixGoogleDocs(doc: Document): void {\n doc.querySelectorAll('b[id^=\"docs-internal-guid\"]').forEach((b) => {\n while (b.firstChild) b.parentNode!.insertBefore(b.firstChild, b);\n b.remove();\n });\n}\n\nfunction fixLegacyAttrs(doc: Document): void {\n doc.querySelectorAll('table').forEach((tb) => {\n const htmlTb = tb as HTMLElement;\n if (!styleMap(htmlTb)['border-collapse']) htmlTb.style.borderCollapse = 'collapse';\n });\n doc.querySelectorAll('[align]').forEach((el) => {\n const htmlEl = el as HTMLElement;\n const v = htmlEl.getAttribute('align')!.toLowerCase();\n if (htmlEl.tagName.toLowerCase() === 'table') {\n if (v === 'center') {\n htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';\n htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';\n } else if (v === 'right') htmlEl.style.marginLeft = htmlEl.style.marginLeft || 'auto';\n else if (v === 'left') htmlEl.style.marginRight = htmlEl.style.marginRight || 'auto';\n } else if (['left', 'right', 'center', 'justify'].includes(v)) {\n htmlEl.style.textAlign = htmlEl.style.textAlign || v;\n // Word aligns tables by wrapping them in <div align=...>; text-align\n // does not move a table box, so mirror the alignment onto the table.\n Array.from(htmlEl.children).forEach((ch) => {\n if (ch.tagName.toLowerCase() !== 'table') return;\n const tb = ch as HTMLElement;\n if (v === 'center') {\n tb.style.marginLeft = tb.style.marginLeft || 'auto';\n tb.style.marginRight = tb.style.marginRight || 'auto';\n } else if (v === 'right') tb.style.marginLeft = tb.style.marginLeft || 'auto';\n else if (v === 'left') tb.style.marginRight = tb.style.marginRight || 'auto';\n });\n }\n htmlEl.removeAttribute('align');\n });\n doc.querySelectorAll('center table').forEach((tb) => {\n const htmlTb = tb as HTMLElement;\n htmlTb.style.marginLeft = htmlTb.style.marginLeft || 'auto';\n htmlTb.style.marginRight = htmlTb.style.marginRight || 'auto';\n });\n doc.querySelectorAll('[bgcolor]').forEach((el) => {\n const htmlEl = el as HTMLElement;\n htmlEl.style.backgroundColor = htmlEl.style.backgroundColor || htmlEl.getAttribute('bgcolor')!;\n htmlEl.removeAttribute('bgcolor');\n });\n}\n\nfunction sanitize(node: Node, doc: Document): void {\n Array.from(node.childNodes).forEach((child) => {\n if (child.nodeType === Node.COMMENT_NODE) {\n child.remove();\n return;\n }\n if (child.nodeType !== Node.ELEMENT_NODE) return;\n const el = child as Element;\n const tag = el.tagName.toLowerCase();\n if (!ALLOWED_TAGS.has(tag)) {\n if (tag === 'font') {\n const span = doc.createElement('span');\n if (el.getAttribute('style')) span.setAttribute('style', el.getAttribute('style')!);\n if (el.getAttribute('color')) span.style.color = el.getAttribute('color')!;\n if (el.getAttribute('face')) span.style.fontFamily = el.getAttribute('face')!;\n const sz = el.getAttribute('size');\n if (sz && !span.style.fontSize) {\n const szMap: Record<string, string> = {\n '1': '8pt',\n '2': '10pt',\n '3': '12pt',\n '4': '14pt',\n '5': '18pt',\n '6': '24pt',\n '7': '36pt'\n };\n if (szMap[sz]) span.style.fontSize = szMap[sz];\n }\n while (el.firstChild) span.appendChild(el.firstChild);\n el.replaceWith(span);\n sanitize(span, doc);\n return;\n }\n sanitize(el, doc);\n while (el.firstChild) el.parentNode!.insertBefore(el.firstChild, el);\n el.remove();\n return;\n }\n const allowed = new Set([...(ALLOWED_ATTRS['*'] || []), ...(ALLOWED_ATTRS[tag] || [])]);\n Array.from(el.attributes).forEach((a) => {\n const n = a.name.toLowerCase();\n if (n !== 'style' && !allowed.has(n)) el.removeAttribute(a.name);\n });\n if (tag === 'a') {\n const href = el.getAttribute('href') || '';\n if (!/^(https?:|mailto:|tel:|#)/i.test(href)) el.removeAttribute('href');\n }\n if (tag === 'img') {\n const src = el.getAttribute('src') || '';\n if (!/^(https?:|data:image\\/|blob:)/i.test(src)) {\n const ph = doc.createElement('span');\n ph.textContent = '[local image — paste it separately]';\n ph.setAttribute('style', 'color:#a33;font-style:italic;font-size:12px');\n el.replaceWith(ph);\n return;\n }\n }\n const styles = styleMap(el);\n const kept: string[] = [];\n for (const [k, v] of Object.entries(styles)) {\n if (!ALLOWED_STYLES.has(k)) continue;\n if (/expression|javascript|url\\s*\\(\\s*['\"]?\\s*file:/i.test(v)) continue;\n if (k === 'font-weight' && /^(400|normal)$/i.test(v)) continue;\n if (k === 'font-style' && /^normal$/i.test(v)) continue;\n if (k === 'text-decoration' && /^none$/i.test(v)) continue;\n kept.push(k + ':' + v);\n }\n if (kept.length) el.setAttribute('style', kept.join(';'));\n else el.removeAttribute('style');\n el.removeAttribute('class');\n sanitize(el, doc);\n if (tag === 'span' && !el.attributes.length) {\n while (el.firstChild) el.parentNode!.insertBefore(el.firstChild, el);\n el.remove();\n }\n });\n}\n\ninterface StyleRule {\n sel: string;\n decls: [string, string][];\n}\n\nfunction extractStyleRules(raw: string): StyleRule[] {\n const rules: StyleRule[] = [];\n const re = /<style[^>]*>([\\s\\S]*?)<\\/style>/gi;\n let m: RegExpExecArray | null;\n while ((m = re.exec(raw))) {\n let css = m[1].replace(/<!--|-->/g, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n css = css.replace(/@media[^{]*\\{(?:[^{}]*\\{[^{}]*\\})*[^{}]*\\}/gi, '');\n css = css.replace(/@[\\w-]+[^{]*\\{[^{}]*\\}/g, '');\n let rm: RegExpExecArray | null;\n const rre = /([^{}]+)\\{([^}]*)\\}/g;\n while ((rm = rre.exec(css))) {\n const decls = rm[2]\n .split(';')\n .map((d) => {\n const i = d.indexOf(':');\n if (i < 1) return null;\n return [d.slice(0, i).trim().toLowerCase(), d.slice(i + 1).trim()] as [string, string];\n })\n .filter((d): d is [string, string] => !!d && !!d[1]);\n if (!decls.length) continue;\n rm[1]\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s && !s.startsWith('@'))\n .forEach((sel) => rules.push({ sel, decls }));\n }\n }\n return rules;\n}\n\nfunction applyStyleRules(doc: Document, rules: StyleRule[]): void {\n if (!rules.length) return;\n const addMap = new Map<Element, { [k: string]: string }>();\n rules.forEach(({ sel, decls }) => {\n let els: NodeListOf<Element>;\n try {\n els = doc.querySelectorAll(sel);\n } catch (e) {\n return;\n }\n els.forEach((el) => {\n let m = addMap.get(el);\n if (!m) {\n m = {};\n addMap.set(el, m);\n }\n decls.forEach(([k, v]) => {\n m![k] = v;\n });\n });\n });\n addMap.forEach((m, el) => {\n const have = styleMap(el);\n const hasDir = el.hasAttribute('dir');\n const hasAlign = el.hasAttribute('align');\n const add = Object.entries(m).filter(([k]) => {\n if (k in have) return false;\n if ((k === 'direction' || k === 'unicode-bidi') && hasDir) return false;\n if (k === 'text-align' && (hasAlign || hasDir)) return false;\n if ((k === 'background' || k === 'background-color') && el.hasAttribute('bgcolor')) return false;\n return true;\n });\n if (!add.length) return;\n const prefix = add.map(([k, v]) => k + ':' + v).join(';');\n const cur = el.getAttribute('style');\n el.setAttribute('style', cur ? prefix + ';' + cur : prefix);\n });\n}\n\nfunction normalizeArabicPresentation(s: string): string {\n return s.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g, (m) => m.normalize('NFKC'));\n}\n\nfunction normalizeArabicText(doc: Document): void {\n const w = doc.createTreeWalker(doc.body, NodeFilter.SHOW_TEXT, null);\n let n: Node | null;\n while ((n = w.nextNode()))\n if (/[ﭐ-﷿ﹰ-ﻼ]/.test(n.nodeValue || '')) n.nodeValue = normalizeArabicPresentation(n.nodeValue || '');\n}\n\nexport function cleanPastedHTML(raw: string, editorDir: 'ltr' | 'rtl' = 'ltr'): string {\n const cssRules = extractStyleRules(raw);\n const doc = new DOMParser().parseFromString(preClean(raw), 'text/html');\n applyStyleRules(doc, cssRules);\n if (/class=\"?Mso|mso-|urn:schemas-microsoft-com/i.test(doc.body.innerHTML)) rebuildWordLists(doc);\n fixGoogleDocs(doc);\n fixLegacyAttrs(doc);\n sanitize(doc.body, doc);\n normalizeArabicText(doc);\n const emptyP = (el: Element | null) => el && el.tagName === 'P' && !el.textContent?.trim() && !el.querySelector('img,table');\n while (emptyP(doc.body.firstElementChild)) doc.body.firstElementChild!.remove();\n while (emptyP(doc.body.lastElementChild)) doc.body.lastElementChild!.remove();\n return doc.body.innerHTML.trim();\n}\n\nexport function normalizeTextPaste(raw: string): string {\n const txt = normalizeArabicPresentation(raw).replace(/\\r/g, '');\n const esc = (s: string) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n if (/\\n/.test(txt)) {\n return txt\n .split(/\\n{2,}/)\n .map((par) => `<p dir=\"auto\">${esc(par).replace(/\\n/g, '<br>') || '<br>'}</p>`)\n .join('');\n }\n return esc(txt);\n}\n","/* Minimal .docx → HTML converter with no dependencies.\n Parses the ZIP container manually and inflates entries with the browser's\n DecompressionStream, then maps WordprocessingML to editor-friendly HTML:\n headings, run formatting, colors, hyperlinks, lists, tables and images. */\n\ninterface ZipEntry {\n name: string;\n method: number;\n compSize: number;\n localOffset: number;\n}\n\nfunction parseZip(buf: ArrayBuffer): Map<string, ZipEntry> {\n const d = new DataView(buf);\n const entries = new Map<string, ZipEntry>();\n // find End Of Central Directory record (sig 0x06054b50), scanning back over the comment\n let eocd = -1;\n for (let i = buf.byteLength - 22; i >= Math.max(0, buf.byteLength - 22 - 0xffff); i--) {\n if (d.getUint32(i, true) === 0x06054b50) {\n eocd = i;\n break;\n }\n }\n if (eocd < 0) throw new Error('EOCD not found');\n const count = d.getUint16(eocd + 10, true);\n let p = d.getUint32(eocd + 16, true);\n const utf8 = new TextDecoder();\n for (let i = 0; i < count; i++) {\n if (d.getUint32(p, true) !== 0x02014b50) break;\n const method = d.getUint16(p + 10, true);\n const compSize = d.getUint32(p + 20, true);\n const nameLen = d.getUint16(p + 28, true);\n const extraLen = d.getUint16(p + 30, true);\n const commentLen = d.getUint16(p + 32, true);\n const localOffset = d.getUint32(p + 42, true);\n const name = utf8.decode(new Uint8Array(buf, p + 46, nameLen));\n entries.set(name, { name, method, compSize, localOffset });\n p += 46 + nameLen + extraLen + commentLen;\n }\n return entries;\n}\n\nasync function readEntry(buf: ArrayBuffer, e: ZipEntry): Promise<Uint8Array> {\n const d = new DataView(buf, e.localOffset);\n if (d.getUint32(0, true) !== 0x04034b50) throw new Error('Bad local header');\n const nameLen = d.getUint16(26, true);\n const extraLen = d.getUint16(28, true);\n const start = e.localOffset + 30 + nameLen + extraLen;\n const comp = new Uint8Array(buf.slice(start, start + e.compSize));\n if (e.method === 0) return comp;\n if (e.method !== 8) throw new Error('Unsupported compression method ' + e.method);\n const stream = new Blob([comp as BlobPart]).stream().pipeThrough(new DecompressionStream('deflate-raw'));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n\n/* ------------------------------------------------------------- helpers */\nconst esc = (s: string) =>\n s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n\nconst kids = (el: Element, name: string): Element[] =>\n Array.from(el.children).filter((c) => c.localName === name);\n\nconst kid = (el: Element, ...path: string[]): Element | null => {\n let cur: Element | null = el;\n for (const name of path) {\n if (!cur) return null;\n cur = Array.from(cur.children).find((c) => c.localName === name) || null;\n }\n return cur;\n};\n\nconst val = (el: Element | null, attrName = 'val'): string => {\n if (!el) return '';\n for (const a of Array.from(el.attributes)) {\n if (a.localName === attrName) return a.value;\n }\n return '';\n};\n\n/** A toggle property like <w:b/> is on unless val is explicitly false/0. */\nconst flagOn = (rPr: Element | null, name: string): boolean => {\n const el = rPr ? kid(rPr, name) : null;\n if (!el) return false;\n const v = val(el);\n return v !== 'false' && v !== '0';\n};\n\nconst HIGHLIGHTS: Record<string, string> = {\n yellow: '#FFFF00',\n green: '#00FF00',\n cyan: '#00FFFF',\n magenta: '#FF00FF',\n blue: '#0000FF',\n red: '#FF0000',\n darkBlue: '#00008B',\n darkCyan: '#008B8B',\n darkGreen: '#006400',\n darkMagenta: '#8B008B',\n darkRed: '#8B0000',\n darkYellow: '#808000',\n darkGray: '#A9A9A9',\n lightGray: '#D3D3D3',\n black: '#000000',\n white: '#FFFFFF'\n};\n\nconst IMG_MIME: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n bmp: 'image/bmp',\n webp: 'image/webp'\n};\n\nfunction toBase64(bytes: Uint8Array): string {\n let bin = '';\n for (let i = 0; i < bytes.length; i += 0x8000) {\n bin += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n }\n return btoa(bin);\n}\n\n/* ------------------------------------------------------------- converter */\nclass DocxConverter {\n constructor(\n private rels: Map<string, string>,\n private images: Map<string, string>,\n private numFmt: Map<string, 'ul' | 'ol'>\n ) {}\n\n convertBody(body: Element): string {\n let html = '';\n // stack of open lists for nested numbering\n let listStack: Array<'ul' | 'ol'> = [];\n const closeLists = (depth: number) => {\n while (listStack.length > depth) html += `</${listStack.pop()}>`;\n };\n for (const child of Array.from(body.children)) {\n if (child.localName === 'p') {\n const list = this.paraList(child);\n if (list) {\n const depth = list.ilvl + 1;\n while (listStack.length > depth) html += `</${listStack.pop()}>`;\n if (listStack.length === depth && listStack[depth - 1] !== list.type) {\n html += `</${listStack.pop()}>`;\n }\n while (listStack.length < depth) {\n html += `<${list.type}>`;\n listStack.push(list.type);\n }\n html += `<li>${this.runsOf(child) || '<br>'}</li>`;\n continue;\n }\n closeLists(0);\n html += this.convertPara(child);\n } else if (child.localName === 'tbl') {\n closeLists(0);\n html += this.convertTable(child);\n } else if (child.localName === 'sectPr') {\n // section properties — no visual content\n }\n }\n closeLists(0);\n return html || '<p><br></p>';\n }\n\n private paraList(p: Element): { type: 'ul' | 'ol'; ilvl: number } | null {\n const numPr = kid(p, 'pPr', 'numPr');\n if (!numPr) return null;\n const numId = val(kid(numPr, 'numId'));\n if (!numId || numId === '0') return null;\n const ilvl = parseInt(val(kid(numPr, 'ilvl')) || '0', 10) || 0;\n return { type: this.numFmt.get(numId) || 'ul', ilvl: Math.min(ilvl, 8) };\n }\n\n private convertPara(p: Element): string {\n const pPr = kid(p, 'pPr');\n const style = val(kid(p, 'pPr', 'pStyle'));\n let tag = 'p';\n const m = /^Heading([1-6])$/i.exec(style);\n if (m) tag = 'h' + m[1];\n else if (/^Title$/i.test(style)) tag = 'h1';\n const css: string[] = [];\n const jc = val(kid(p, 'pPr', 'jc'));\n if (jc === 'center') css.push('text-align:center');\n else if (jc === 'right' || jc === 'end') css.push('text-align:right');\n else if (jc === 'both' || jc === 'distribute') css.push('text-align:justify');\n if (pPr && kid(pPr, 'bidi')) css.push('direction:rtl');\n const inner = this.runsOf(p);\n const attrs = css.length ? ` style=\"${css.join(';')}\"` : '';\n return `<${tag}${attrs}>${inner || '<br>'}</${tag}>`;\n }\n\n private runsOf(el: Element): string {\n let html = '';\n for (const child of Array.from(el.children)) {\n if (child.localName === 'r') html += this.convertRun(child);\n else if (child.localName === 'hyperlink') {\n let href = this.rels.get(val(child, 'id')) || '';\n const anchor = val(child, 'anchor');\n if (!href && anchor) href = '#' + anchor;\n const inner = this.runsOf(child);\n html += href ? `<a href=\"${esc(href)}\">${inner}</a>` : inner;\n } else if (child.localName === 'smartTag' || child.localName === 'ins') {\n html += this.runsOf(child);\n }\n }\n return html;\n }\n\n private convertRun(r: Element): string {\n const rPr = kid(r, 'rPr');\n let text = '';\n for (const child of Array.from(r.children)) {\n if (child.localName === 't') text += esc(child.textContent || '');\n else if (child.localName === 'br' || child.localName === 'cr') text += '<br>';\n else if (child.localName === 'tab') text += ' ';\n else if (child.localName === 'drawing' || child.localName === 'pict' || child.localName === 'object') {\n text += this.convertImage(child);\n }\n }\n if (!text) return '';\n const css: string[] = [];\n const color = val(rPr ? kid(rPr, 'color') : null);\n if (color && color !== 'auto') css.push('color:#' + color);\n const highlight = val(rPr ? kid(rPr, 'highlight') : null);\n if (highlight && HIGHLIGHTS[highlight]) css.push('background-color:' + HIGHLIGHTS[highlight]);\n const sz = parseFloat(val(rPr ? kid(rPr, 'sz') : null));\n if (sz) css.push('font-size:' + Math.round((sz / 2) * (4 / 3)) + 'px');\n const font = rPr ? kid(rPr, 'rFonts') : null;\n const fontName = val(font, 'ascii') || val(font, 'cs');\n if (fontName) css.push(`font-family:'${fontName}'`);\n if (css.length) text = `<span style=\"${css.join(';')}\">${text}</span>`;\n if (flagOn(rPr, 'b')) text = `<strong>${text}</strong>`;\n if (flagOn(rPr, 'i')) text = `<em>${text}</em>`;\n if (flagOn(rPr, 'u') && val(kid(rPr!, 'u')) !== 'none') text = `<u>${text}</u>`;\n if (flagOn(rPr, 'strike')) text = `<s>${text}</s>`;\n const vert = val(rPr ? kid(rPr, 'vertAlign') : null);\n if (vert === 'superscript') text = `<sup>${text}</sup>`;\n else if (vert === 'subscript') text = `<sub>${text}</sub>`;\n return text;\n }\n\n private convertImage(holder: Element): string {\n // find any blip (DrawingML) or imagedata (VML) descendant regardless of depth\n let relId = '';\n let widthPx = 0;\n const walk = (el: Element) => {\n if (el.localName === 'blip') relId = relId || val(el, 'embed') || val(el, 'link');\n if (el.localName === 'imagedata') relId = relId || val(el, 'id');\n if (el.localName === 'extent') {\n const cx = parseFloat(el.getAttribute('cx') || '0');\n if (cx) widthPx = Math.round(cx / 9525); // EMU → px\n }\n for (const c of Array.from(el.children)) walk(c);\n };\n walk(holder);\n if (!relId) return '';\n const src = this.images.get(relId);\n if (!src) return '';\n const w = widthPx ? ` width=\"${widthPx}\"` : '';\n return `<img src=\"${src}\" alt=\"\"${w}>`;\n }\n\n private convertTable(tbl: Element): string {\n let html = '<table style=\"border-collapse:collapse;width:100%\"><tbody>';\n for (const tr of kids(tbl, 'tr')) {\n html += '<tr>';\n for (const tc of kids(tr, 'tc')) {\n const span = parseInt(val(kid(tc, 'tcPr', 'gridSpan')) || '1', 10) || 1;\n const spanAttr = span > 1 ? ` colspan=\"${span}\"` : '';\n let inner = '';\n for (const child of Array.from(tc.children)) {\n if (child.localName === 'p') inner += this.convertPara(child);\n else if (child.localName === 'tbl') inner += this.convertTable(child);\n }\n html += `<td style=\"border:1px solid #b9c2cc\"${spanAttr}>${inner || '<br>'}</td>`;\n }\n html += '</tr>';\n }\n return html + '</tbody></table>';\n }\n}\n\n/* ------------------------------------------------------------- entry point */\nexport async function importDocxToHtml(input: File | Blob | ArrayBuffer): Promise<string> {\n const buf = input instanceof ArrayBuffer ? input : await input.arrayBuffer();\n const entries = parseZip(buf);\n const decoder = new TextDecoder();\n const readXml = async (name: string): Promise<Document | null> => {\n const e = entries.get(name);\n if (!e) return null;\n return new DOMParser().parseFromString(decoder.decode(await readEntry(buf, e)), 'application/xml');\n };\n\n const doc = await readXml('word/document.xml');\n const body = doc?.getElementsByTagName('*');\n let bodyEl: Element | null = null;\n if (body) {\n for (const el of Array.from(body)) {\n if (el.localName === 'body') {\n bodyEl = el;\n break;\n }\n }\n }\n if (!bodyEl) throw new Error('word/document.xml missing or invalid');\n\n // relationships: id → target (hyperlinks are absolute, images relative to word/)\n const rels = new Map<string, string>();\n const imageTargets = new Map<string, string>();\n const relsDoc = await readXml('word/_rels/document.xml.rels');\n if (relsDoc) {\n for (const rel of Array.from(relsDoc.getElementsByTagName('*'))) {\n if (rel.localName !== 'Relationship') continue;\n const id = rel.getAttribute('Id') || '';\n const target = rel.getAttribute('Target') || '';\n const type = rel.getAttribute('Type') || '';\n if (/hyperlink/i.test(type)) rels.set(id, target);\n else if (/image/i.test(type)) imageTargets.set(id, target);\n }\n }\n\n // load referenced images as data URLs\n const images = new Map<string, string>();\n for (const [id, target] of imageTargets) {\n const path = target.startsWith('/') ? target.slice(1) : 'word/' + target.replace(/^\\.\\//, '');\n const entry = entries.get(path);\n if (!entry) continue;\n const ext = (path.split('.').pop() || '').toLowerCase();\n const mime = IMG_MIME[ext];\n if (!mime) continue; // skip unsupported formats like emf/wmf\n try {\n images.set(id, `data:${mime};base64,${toBase64(await readEntry(buf, entry))}`);\n } catch {\n /* skip broken image */\n }\n }\n\n // numbering: numId → ul/ol (from level-0 numFmt of the abstract definition)\n const numFmt = new Map<string, 'ul' | 'ol'>();\n const numDoc = await readXml('word/numbering.xml');\n if (numDoc) {\n const abstractFmt = new Map<string, 'ul' | 'ol'>();\n const all = Array.from(numDoc.getElementsByTagName('*'));\n for (const el of all) {\n if (el.localName !== 'abstractNum') continue;\n const id = val(el, 'abstractNumId');\n const lvl0 = kids(el, 'lvl').find((l) => val(l, 'ilvl') === '0') || kids(el, 'lvl')[0];\n const fmt = lvl0 ? val(kid(lvl0, 'numFmt')) : '';\n abstractFmt.set(id, fmt === 'bullet' ? 'ul' : 'ol');\n }\n for (const el of all) {\n if (el.localName !== 'num') continue;\n const numId = val(el, 'numId');\n const absId = val(kid(el, 'abstractNumId'));\n numFmt.set(numId, abstractFmt.get(absId) || 'ul');\n }\n }\n\n return new DocxConverter(rels, images, numFmt).convertBody(bodyEl);\n}\n","import { EditorInitOptions, EditorLanguage, FableEditorApi, MenuItemDef, DialogButton } from './types';\r\nimport { getStrings, I18nStrings } from './i18n';\r\nimport { FONTS, SIZES, BLOCKS, COLORS, QUICK_COLORS, CHAR_CATEGORIES, EMOJI_CATEGORIES, GlyphCategory, MIN_FONT_PX, MAX_FONT_PX, LINE_HEIGHTS, WORD_SPACINGS, LETTER_SPACINGS, CODE_LANGS, DEFAULT_TOOLBAR, DEFAULT_MENUBAR } from './config';\r\nimport { IC } from './icons';\r\nimport { cleanPastedHTML, normalizeTextPaste } from './paste-engine';\r\nimport { importDocxToHtml } from './docx-import';\r\n\r\ntype ImgCorner = 'nw' | 'ne' | 'sw' | 'se';\r\nconst IMG_CORNERS: ImgCorner[] = ['nw', 'ne', 'sw', 'se'];\r\n\r\ntype TplLayout = 'img-left' | 'img-right' | 'img-top' | 'img-center';\r\nconst TPL_LAYOUTS: TplLayout[] = ['img-left', 'img-right', 'img-top', 'img-center'];\r\nconst TPL_LABEL: Record<TplLayout, keyof I18nStrings> = {\r\n 'img-left': 'tplimgleft',\r\n 'img-right': 'tplimgright',\r\n 'img-top': 'tplimgtop',\r\n 'img-center': 'tplimgcenter'\r\n};\r\nconst TPL_ICON: Record<TplLayout, string> = {\r\n 'img-left': IC.tplleft,\r\n 'img-right': IC.tplright,\r\n 'img-top': IC.tpltop,\r\n 'img-center': IC.tplcenter\r\n};\r\n\r\n/* ---------------------------------------------------------- tooltips\r\n One shared bubble + one delegated document listener restyles every native\r\n `title` tooltip in the editor UI (toolbar, menus, popups, context toolbars,\r\n dialogs) without extra wrapper markup per control. Titles inside the\r\n editable area are user content and keep the browser default. */\r\nconst TIP_SCOPE = '.tox,.pop,.tblctx,.imgctx,.selctx,.dlg';\r\nlet tipEl: HTMLDivElement | null = null;\r\nlet tipTarget: HTMLElement | null = null;\r\nlet tipTimer = 0;\r\nlet tipsInstalled = false;\r\n\r\nfunction hideTip(): void {\r\n clearTimeout(tipTimer);\r\n tipTarget = null;\r\n if (tipEl) tipEl.classList.remove('show');\r\n}\r\n\r\nfunction showTip(el: HTMLElement): void {\r\n const text = el.dataset.tip;\r\n if (!text) return;\r\n tipTarget = el;\r\n clearTimeout(tipTimer);\r\n // moving along a toolbar re-anchors an already-visible tip almost instantly\r\n const delay = tipEl && tipEl.classList.contains('show') ? 60 : 350;\r\n tipTimer = window.setTimeout(() => {\r\n if (tipTarget !== el || !document.contains(el)) return;\r\n if (!tipEl) {\r\n tipEl = document.createElement('div');\r\n tipEl.className = 'etip';\r\n document.body.appendChild(tipEl);\r\n }\r\n tipEl.textContent = text;\r\n tipEl.classList.add('show');\r\n const r = el.getBoundingClientRect();\r\n const w = tipEl.offsetWidth;\r\n const h = tipEl.offsetHeight;\r\n let x = r.left + r.width / 2 - w / 2;\r\n x = Math.max(6, Math.min(x, innerWidth - w - 6));\r\n let y = r.bottom + 7;\r\n if (y + h > innerHeight - 6) y = r.top - h - 7;\r\n tipEl.style.left = x + 'px';\r\n tipEl.style.top = y + 'px';\r\n }, delay);\r\n}\r\n\r\nfunction installTooltips(): void {\r\n if (tipsInstalled) return;\r\n tipsInstalled = true;\r\n document.addEventListener('mouseover', (e) => {\r\n const raw = e.target as HTMLElement;\r\n const el = raw.closest ? (raw.closest('[title],[data-tip]') as HTMLElement | null) : null;\r\n if (!el || !el.closest(TIP_SCOPE) || el.closest('.earea')) {\r\n if (el !== tipTarget) hideTip();\r\n return;\r\n }\r\n const title = el.getAttribute('title');\r\n if (title) {\r\n // hand the text to the custom bubble and disarm the native one\r\n el.dataset.tip = title;\r\n el.removeAttribute('title');\r\n if (!el.getAttribute('aria-label')) el.setAttribute('aria-label', title);\r\n }\r\n if (el !== tipTarget) showTip(el);\r\n });\r\n document.addEventListener('mouseout', (e) => {\r\n if (tipTarget && !tipTarget.contains(e.relatedTarget as Node)) hideTip();\r\n });\r\n document.addEventListener('mousedown', hideTip, true);\r\n addEventListener('scroll', hideTip, true);\r\n}\r\n\r\nexport class FableEditor implements FableEditorApi {\r\n private static instanceCounter = 0;\r\n\r\n private options: Required<\r\n Omit<\r\n EditorInitOptions,\r\n | 'imageUploadHandler'\r\n | 'onImageUploadError'\r\n | 'contentStyle'\r\n | 'videoUploadHandler'\r\n | 'onVideoUploadError'\r\n | 'primaryColor'\r\n | 'toolbarGroupBackground'\r\n | 'uiFontFamily'\r\n >\r\n >;\r\n private lang: EditorLanguage = 'en';\r\n private contentClass = 'fable-content-' + FableEditor.instanceCounter++;\r\n private contentStyleEl: HTMLStyleElement | null = null;\r\n\r\n private shell!: HTMLElement;\r\n private menubar!: HTMLElement;\r\n private toolbar!: HTMLElement;\r\n private ed!: HTMLElement;\r\n private statusbar!: HTMLElement;\r\n private sbHelp!: HTMLElement;\r\n private sbWords!: HTMLElement;\r\n private imgInput!: HTMLInputElement;\r\n\r\n private savedRange: Range | null = null;\r\n private foreColor = '#000000';\r\n private backColor = '#FACC15';\r\n\r\n private openPop: HTMLElement | null = null;\r\n private openSubEl: HTMLElement | null = null;\r\n private popAnchor: HTMLElement | null = null;\r\n private dlgOvl: HTMLElement | null = null;\r\n\r\n private tblActive: HTMLTableElement | null = null;\r\n private tblCorner: HTMLElement | null = null;\r\n private tblColBars: HTMLElement[] = [];\r\n private tblCtx: HTMLElement | null = null;\r\n private tblCellMark: HTMLElement | null = null;\r\n private tblOpMark: HTMLElement | null = null;\r\n private tblOpMarkKind: 'row' | 'col' | null = null;\r\n\r\n private imgActive: HTMLImageElement | null = null;\r\n private imgHandles: HTMLElement[] = [];\r\n private imgCtx: HTMLElement | null = null;\r\n private imgHideTimer: number | null = null;\r\n\r\n private phActive: HTMLElement | null = null;\r\n private phCtx: HTMLElement | null = null;\r\n private phUploadTarget: HTMLElement | null = null;\r\n private imageUploadHandler?: (file: File) => Promise<string>;\r\n private onImageUploadError?: (error: unknown, file: File) => void;\r\n private contentStyle?: string;\r\n\r\n private vidInput!: HTMLInputElement;\r\n /* a <video> element or a .video-embed iframe wrapper — both share the\r\n same selection outline + align/delete context toolbar */\r\n private vidActive: HTMLElement | null = null;\r\n private vidCtx: HTMLElement | null = null;\r\n private vidHideTimer: number | null = null;\r\n private vphActive: HTMLElement | null = null;\r\n private vphCtx: HTMLElement | null = null;\r\n private vphUploadTarget: HTMLElement | null = null;\r\n private videoUploadHandler?: (file: File) => Promise<string>;\r\n private onVideoUploadError?: (error: unknown, file: File) => void;\r\n\r\n private selCtx: HTMLElement | null = null;\r\n\r\n private tbrMore: HTMLButtonElement | null = null;\r\n private tbrExpanded = false;\r\n\r\n private codeActive: HTMLElement | null = null;\r\n private codeCtx: HTMLElement | null = null;\r\n\r\n private tplActive: HTMLElement | null = null;\r\n private tplCtx: HTMLElement | null = null;\r\n\r\n private docInput!: HTMLInputElement;\r\n private revisions: Array<{ time: number; html: string }> = [];\r\n private revTimer: number | null = null;\r\n private draftTimer: number | null = null;\r\n private draftStorageKey = '';\r\n\r\n private listeners: Array<() => void> = [];\r\n private isDestroyed = false;\r\n\r\n constructor(options: EditorInitOptions) {\r\n this.options = {\r\n target: options.target,\r\n language: options.language || 'en',\r\n height: options.height ?? 302,\r\n initialContent: options.initialContent ?? '<p><br></p>',\r\n onChange: options.onChange || (() => { }),\r\n onReady: options.onReady || (() => { }),\r\n menubar: options.menubar ?? true,\r\n toolbar: options.toolbar ?? true,\r\n statusbar: options.statusbar ?? true,\r\n readonly: options.readonly ?? false,\r\n draftKey: options.draftKey ?? (typeof location !== 'undefined' ? location.pathname : 'default'),\r\n fontFamilyFormats: options.fontFamilyFormats ?? FONTS,\r\n imageFileTypes: options.imageFileTypes ?? ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp', 'image/webp'],\r\n videoFileTypes: options.videoFileTypes ?? ['video/mp4', 'video/webm', 'video/ogg']\r\n };\r\n this.imageUploadHandler = options.imageUploadHandler;\r\n this.onImageUploadError = options.onImageUploadError;\r\n this.videoUploadHandler = options.videoUploadHandler;\r\n this.onVideoUploadError = options.onVideoUploadError;\r\n this.contentStyle = options.contentStyle;\r\n this.applyTheme(options);\r\n this.lang = this.options.language;\r\n this.draftStorageKey = 'tmclone-draft:' + this.options.draftKey;\r\n this.initDOM();\r\n this.bindEvents();\r\n this.initUI();\r\n this.recordRevision();\r\n this.options.onReady(this);\r\n }\r\n\r\n private t(key: keyof I18nStrings): string {\r\n const s = getStrings(this.lang)[key];\r\n return typeof s === 'string' ? s : (s as string[]).join(',');\r\n }\r\n\r\n private tArr(key: keyof I18nStrings): string[] {\r\n return getStrings(this.lang)[key] as string[];\r\n }\r\n\r\n private dir(): 'ltr' | 'rtl' {\r\n return getStrings(this.lang).dir;\r\n }\r\n\r\n /* ---------------------------------------------------------- DOM setup */\r\n private initDOM(): void {\r\n const target = this.options.target;\r\n target.innerHTML = '';\r\n target.classList.add('tox-root');\r\n\r\n this.shell = document.createElement('div');\r\n this.shell.className = 'tox';\r\n\r\n this.menubar = document.createElement('div');\r\n this.menubar.className = 'mnb';\r\n\r\n this.toolbar = document.createElement('div');\r\n this.toolbar.className = 'tbr';\r\n\r\n this.ed = document.createElement('div');\r\n this.ed.className = 'earea ' + this.contentClass;\r\n this.ed.setAttribute('contenteditable', (!this.options.readonly).toString());\r\n this.ed.spellcheck = true;\r\n this.ed.innerHTML = this.options.initialContent;\r\n this.ed.style.height = this.options.height + 'px';\r\n\r\n this.statusbar = document.createElement('div');\r\n this.statusbar.className = 'sbar';\r\n this.statusbar.innerHTML = `\r\n <span class=\"mid\"></span>\r\n <span class=\"words\"></span>\r\n <span class=\"grip\">\r\n <svg viewBox=\"0 0 12 12\"><path d=\"M11 1 1 11M11 6 6 11M11 11h0\"/></svg>\r\n </span>\r\n `;\r\n this.sbHelp = this.statusbar.querySelector('.mid') as HTMLElement;\r\n this.sbWords = this.statusbar.querySelector('.words') as HTMLElement;\r\n const grip = this.statusbar.querySelector('.grip') as HTMLElement;\r\n this.bindGrip(grip);\r\n\r\n this.shell.appendChild(this.menubar);\r\n this.shell.appendChild(this.toolbar);\r\n this.shell.appendChild(this.ed);\r\n this.shell.appendChild(this.statusbar);\r\n if (this.contentStyle) {\r\n this.contentStyleEl = document.createElement('style');\r\n this.contentStyleEl.textContent = this.scopeContentStyle(this.contentStyle);\r\n this.shell.appendChild(this.contentStyleEl);\r\n }\r\n target.appendChild(this.shell);\r\n installTooltips();\r\n\r\n if (!this.options.statusbar) this.statusbar.style.display = 'none';\r\n\r\n this.imgInput = document.createElement('input');\r\n this.imgInput.type = 'file';\r\n this.imgInput.accept = this.options.imageFileTypes.join(',');\r\n this.imgInput.style.display = 'none';\r\n target.appendChild(this.imgInput);\r\n\r\n this.vidInput = document.createElement('input');\r\n this.vidInput.type = 'file';\r\n this.vidInput.accept = this.options.videoFileTypes.join(',');\r\n this.vidInput.style.display = 'none';\r\n target.appendChild(this.vidInput);\r\n\r\n this.docInput = document.createElement('input');\r\n this.docInput.type = 'file';\r\n this.docInput.accept = '.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document';\r\n this.docInput.style.display = 'none';\r\n target.appendChild(this.docInput);\r\n }\r\n\r\n /** Theme options land as CSS variables on the document root rather than the editor\r\n * shell, because dialogs, popups and floating context toolbars are appended to\r\n * document.body and would not inherit variables scoped to the shell. */\r\n private applyTheme(options: EditorInitOptions): void {\r\n const root = document.documentElement;\r\n if (options.primaryColor) root.style.setProperty('--fable-primary', options.primaryColor);\r\n if (options.toolbarGroupBackground) root.style.setProperty('--fable-tgrp-bg', options.toolbarGroupBackground);\r\n if (options.uiFontFamily) root.style.setProperty('--fable-ui-font', options.uiFontFamily);\r\n }\r\n\r\n /** Rewrites the literal word `body` in a user-supplied `contentStyle` string to a\r\n * selector scoped to this instance's content div. Everything else passes through\r\n * verbatim, since `.ed` is a plain div in the host page (not an iframe) and an\r\n * unscoped `body { ... }` rule would otherwise leak onto the host page's body. */\r\n private scopeContentStyle(css: string): string {\r\n return css.replace(/\\bbody\\b/g, '.' + this.contentClass);\r\n }\r\n\r\n private bindGrip(grip: HTMLElement): void {\r\n let startY = 0;\r\n let startH = 0;\r\n const md = (e: MouseEvent) => {\r\n startY = e.clientY;\r\n startH = this.ed.offsetHeight;\r\n e.preventDefault();\r\n const mv = (ev: MouseEvent) => {\r\n this.ed.style.height = Math.max(120, startH + ev.clientY - startY) + 'px';\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n };\r\n grip.addEventListener('mousedown', md);\r\n this.listeners.push(() => grip.removeEventListener('mousedown', md));\r\n }\r\n\r\n /* ---------------------------------------------------------- event binding */\r\n private bindEvents(): void {\r\n this.onDoc('mousedown', (e) => {\r\n if (\r\n this.openPop &&\r\n !this.openPop.contains(e.target as Node) &&\r\n !this.popAnchor!.contains(e.target as Node) &&\r\n !(this.openSubEl && this.openSubEl.contains(e.target as Node))\r\n ) {\r\n this.closePop();\r\n }\r\n });\r\n this.onDoc('keydown', (e) => {\r\n if (e.key === 'Escape') {\r\n this.closePop();\r\n this.closeDlg();\r\n }\r\n });\r\n this.onDoc('selectionchange', () => {\r\n const sel = window.getSelection();\r\n if (sel && this.ed.contains(sel.anchorNode)) {\r\n this.saveSel();\r\n this.refreshState();\r\n this.updateSelToolbar(sel);\r\n this.positionCellMarker();\r\n } else {\r\n this.clearSelToolbar();\r\n }\r\n });\r\n\r\n this.on(this.ed, 'input', () => {\r\n this.refreshState();\r\n this.onChange();\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n });\r\n this.on(this.ed, 'keydown', (e: KeyboardEvent) => {\r\n if (e.altKey && e.key === '0') {\r\n e.preventDefault();\r\n this.helpDlg();\r\n }\r\n if ((e.key === 'Delete' || e.key === 'Backspace') && this.phActive) {\r\n e.preventDefault();\r\n this.removeImgPlaceholder();\r\n }\r\n if ((e.key === 'Delete' || e.key === 'Backspace') && this.vphActive) {\r\n e.preventDefault();\r\n this.removeVphPlaceholder();\r\n }\r\n if (e.key === '`' && !e.ctrlKey && !e.metaKey && !e.altKey) this.tryCodeTyping(e);\r\n if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && !e.metaKey && !e.altKey) this.tryExitBlockquote(e);\r\n });\r\n this.on(this.ed, 'paste', (e: ClipboardEvent) => this.handlePaste(e));\r\n this.on(this.ed, 'drop', (e: DragEvent) => {\r\n /* content drops stay blocked (powerpaste_block_drop) — only an\r\n image/video file dropped onto its matching upload placeholder is consumed */\r\n e.preventDefault();\r\n const target = e.target as HTMLElement;\r\n const ph = target.closest?.('.img-ph:not(.vid-ph)') as HTMLElement | null;\r\n if (ph && this.ed.contains(ph) && !this.options.readonly) {\r\n const file = Array.from(e.dataTransfer?.files || []).find((f) => f.type.startsWith('image/'));\r\n if (file) this.readImageFileInto(file, ph);\r\n return;\r\n }\r\n const vph = target.closest?.('.vid-ph') as HTMLElement | null;\r\n if (vph && this.ed.contains(vph) && !this.options.readonly) {\r\n const file = Array.from(e.dataTransfer?.files || []).find((f) => f.type.startsWith('video/'));\r\n if (file) this.readVideoFileInto(file, vph);\r\n }\r\n });\r\n this.on(this.ed, 'dragover', (e: DragEvent) => e.preventDefault());\r\n this.on(this.ed, 'mousedown', (e: MouseEvent) => {\r\n const target = e.target as HTMLElement;\r\n const table = target.closest?.('table');\r\n if (table && this.ed.contains(table)) this.selectTableForResize(table as HTMLTableElement);\r\n else this.clearTableHandles();\r\n const ph = target.closest?.('.img-ph:not(.vid-ph)') as HTMLElement | null;\r\n if (ph && this.ed.contains(ph) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.ed.focus();\r\n this.selectImgPlaceholder(ph);\r\n } else {\r\n this.clearImgPlaceholderSel();\r\n }\r\n const vph = target.closest?.('.vid-ph') as HTMLElement | null;\r\n if (vph && this.ed.contains(vph) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.ed.focus();\r\n this.selectVphPlaceholder(vph);\r\n } else {\r\n this.clearVphPlaceholderSel();\r\n }\r\n const tpl = target.closest?.('.tpl') as HTMLElement | null;\r\n if (tpl && this.ed.contains(tpl) && !this.options.readonly) this.selectTemplate(tpl);\r\n else this.clearTplSel();\r\n const codeBlk = target.closest?.('pre.code-block') as HTMLElement | null;\r\n if (codeBlk && this.ed.contains(codeBlk) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.selectCodeEl(codeBlk);\r\n } else {\r\n this.clearCodeSel();\r\n }\r\n const img = target.closest?.('img') as HTMLImageElement | null;\r\n if (img && this.ed.contains(img) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.selectImage(img);\r\n } else {\r\n this.clearImageHandles();\r\n }\r\n const vid = target.closest?.('video, .video-embed') as HTMLElement | null;\r\n if (vid && this.ed.contains(vid) && !this.options.readonly) {\r\n e.preventDefault();\r\n this.selectVideo(vid);\r\n } else {\r\n this.clearVidHandles();\r\n }\r\n });\r\n this.on(this.ed, 'mouseover', (e: MouseEvent) => {\r\n if (this.options.readonly) return;\r\n const img = (e.target as HTMLElement).closest?.('img') as HTMLImageElement | null;\r\n if (img && this.ed.contains(img)) {\r\n this.cancelImgHide();\r\n this.selectImage(img);\r\n }\r\n });\r\n this.on(this.ed, 'mouseout', (e: MouseEvent) => {\r\n const img = (e.target as HTMLElement).closest?.('img');\r\n if (!img) return;\r\n const to = e.relatedTarget as Node | null;\r\n if (\r\n to &&\r\n (this.imgCtx?.contains(to) ||\r\n this.imgHandles.some((h) => h.contains(to)) ||\r\n (to as HTMLElement).closest?.('img') === img)\r\n )\r\n return;\r\n this.scheduleImgHide();\r\n });\r\n this.on(this.ed, 'scroll', () => {\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n });\r\n this.onWin(\r\n 'scroll',\r\n () => {\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n this.repositionSelToolbar();\r\n },\r\n true\r\n );\r\n this.onWin('resize', () => {\r\n this.positionTableHandles();\r\n this.positionImageHandles();\r\n this.positionImgPhCtx();\r\n this.positionTplCtx();\r\n this.positionVphCtx();\r\n this.positionVidCtx();\r\n this.positionCodeCtx();\r\n this.repositionSelToolbar();\r\n this.updateToolbarOverflow();\r\n });\r\n /* container-driven, not just viewport-driven: an editor inside a resizable\r\n panel collapses/expands its toolbar as its own width changes */\r\n if (typeof ResizeObserver !== 'undefined') {\r\n const ro = new ResizeObserver(() => this.updateToolbarOverflow());\r\n ro.observe(this.shell);\r\n this.listeners.push(() => ro.disconnect());\r\n }\r\n\r\n this.on(this.imgInput, 'change', () => {\r\n const file = this.imgInput.files?.[0];\r\n if (!file) return;\r\n const ph = this.phUploadTarget;\r\n this.phUploadTarget = null;\r\n if (ph && this.ed.contains(ph)) {\r\n this.readImageFileInto(file, ph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n this.restoreSel();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<img src=\"${fr.result}\" title=\"${file.name.replace(/\"/g, '')}\" alt=\"\">`\r\n );\r\n this.onChange();\r\n };\r\n fr.readAsDataURL(file);\r\n });\r\n\r\n this.on(this.vidInput, 'change', () => {\r\n const file = this.vidInput.files?.[0];\r\n if (!file) return;\r\n const vph = this.vphUploadTarget;\r\n this.vphUploadTarget = null;\r\n if (vph && this.ed.contains(vph)) {\r\n this.readVideoFileInto(file, vph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n this.restoreSel();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<video controls src=\"${fr.result}\" title=\"${file.name.replace(/\"/g, '')}\"></video>`\r\n );\r\n this.onChange();\r\n };\r\n fr.readAsDataURL(file);\r\n });\r\n\r\n this.on(this.docInput, 'change', () => {\r\n const file = this.docInput.files?.[0];\r\n if (!file) return;\r\n this.importWordFile(file).catch(() => alert(this.t('importfail')));\r\n });\r\n\r\n this.onDoc('mousedown', (e) => {\r\n if (\r\n this.ed.contains(e.target as Node) ||\r\n e.target === this.tblCorner ||\r\n this.tblColBars.includes(e.target as HTMLElement) ||\r\n (this.tblCtx && this.tblCtx.contains(e.target as Node)) ||\r\n this.imgHandles.includes(e.target as HTMLElement) ||\r\n (this.imgCtx && this.imgCtx.contains(e.target as Node)) ||\r\n (this.phCtx && this.phCtx.contains(e.target as Node)) ||\r\n (this.tplCtx && this.tplCtx.contains(e.target as Node)) ||\r\n (this.selCtx && this.selCtx.contains(e.target as Node)) ||\r\n (this.vphCtx && this.vphCtx.contains(e.target as Node)) ||\r\n (this.vidCtx && this.vidCtx.contains(e.target as Node)) ||\r\n (this.codeCtx && this.codeCtx.contains(e.target as Node)) ||\r\n (this.openPop && this.openPop.contains(e.target as Node)) ||\r\n (this.openSubEl && this.openSubEl.contains(e.target as Node))\r\n )\r\n return;\r\n this.clearTableHandles();\r\n this.clearImageHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearTplSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.clearSelToolbar();\r\n });\r\n }\r\n\r\n private on<K extends keyof HTMLElementEventMap>(\r\n target: EventTarget,\r\n event: K,\r\n handler: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any\r\n ): void {\r\n target.addEventListener(event, handler as EventListener);\r\n this.listeners.push(() => target.removeEventListener(event, handler as EventListener));\r\n }\r\n\r\n private onDoc<K extends keyof DocumentEventMap>(event: K, handler: (this: Document, ev: DocumentEventMap[K]) => any): void {\r\n document.addEventListener(event, handler as EventListener);\r\n this.listeners.push(() => document.removeEventListener(event, handler as EventListener));\r\n }\r\n\r\n private onWin<K extends keyof WindowEventMap>(\r\n event: K,\r\n handler: (this: Window, ev: WindowEventMap[K]) => any,\r\n capture?: boolean\r\n ): void {\r\n window.addEventListener(event, handler as EventListener, capture);\r\n this.listeners.push(() => window.removeEventListener(event, handler as EventListener, capture));\r\n }\r\n\r\n /* ---------------------------------------------------------- public API */\r\n getContent(): string {\r\n return this.ed.innerHTML;\r\n }\r\n\r\n setContent(html: string): void {\r\n this.ed.innerHTML = html || '<p><br></p>';\r\n this.refreshState();\r\n this.clearTableHandles();\r\n this.clearImageHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearTplSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.clearSelToolbar();\r\n this.onChange();\r\n }\r\n\r\n insertContent(html: string): void {\r\n this.restoreSel();\r\n document.execCommand('insertHTML', false, html);\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n setLanguage(lang: EditorLanguage): void {\r\n this.lang = lang;\r\n this.initUI();\r\n }\r\n\r\n focus(): void {\r\n this.ed.focus();\r\n }\r\n\r\n async importWordFile(file: File | Blob): Promise<void> {\r\n const html = await importDocxToHtml(file);\r\n this.recordRevision();\r\n this.setContent(html);\r\n this.recordRevision();\r\n }\r\n\r\n restoreDraft(): boolean {\r\n let raw: string | null = null;\r\n try {\r\n raw = localStorage.getItem(this.draftStorageKey);\r\n } catch {\r\n /* storage unavailable */\r\n }\r\n if (!raw) return false;\r\n try {\r\n const draft = JSON.parse(raw) as { time: number; html: string };\r\n if (!draft.html) return false;\r\n this.recordRevision();\r\n this.setContent(draft.html);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n getRevisions(): Array<{ time: number; html: string }> {\r\n return this.revisions.slice();\r\n }\r\n\r\n destroy(): void {\r\n if (this.isDestroyed) return;\r\n this.isDestroyed = true;\r\n if (this.revTimer != null) window.clearTimeout(this.revTimer);\r\n if (this.draftTimer != null) window.clearTimeout(this.draftTimer);\r\n this.closePop();\r\n this.closeDlg();\r\n this.clearTableHandles();\r\n this.clearImageHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearTplSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.clearSelToolbar();\r\n this.listeners.forEach((fn) => fn());\r\n this.listeners = [];\r\n if (this.shell && this.shell.parentNode) this.shell.parentNode.removeChild(this.shell);\r\n if (this.imgInput && this.imgInput.parentNode) this.imgInput.parentNode.removeChild(this.imgInput);\r\n if (this.vidInput && this.vidInput.parentNode) this.vidInput.parentNode.removeChild(this.vidInput);\r\n if (this.docInput && this.docInput.parentNode) this.docInput.parentNode.removeChild(this.docInput);\r\n this.contentStyleEl = null;\r\n }\r\n\r\n /* ---------------------------------------------------------- selection */\r\n private saveSel(): void {\r\n const s = window.getSelection();\r\n if (s && s.rangeCount && this.ed.contains(s.anchorNode)) this.savedRange = s.getRangeAt(0).cloneRange();\r\n }\r\n\r\n private restoreSel(): void {\r\n if (!this.savedRange) {\r\n this.ed.focus();\r\n return;\r\n }\r\n this.ed.focus();\r\n const s = window.getSelection();\r\n if (!s) return;\r\n s.removeAllRanges();\r\n s.addRange(this.savedRange);\r\n }\r\n\r\n private exec(cmd: string, val?: string): void {\r\n this.restoreSel();\r\n document.execCommand('styleWithCSS', false, cmd !== 'fontSize' ? 'true' : 'false');\r\n document.execCommand(cmd, false, val ?? (undefined as any));\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private closestBlock(node: Node | null): HTMLElement | null {\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && /^(P|DIV|H[1-6]|LI|PRE|BLOCKQUOTE|TD|TH)$/i.test((node as HTMLElement).tagName)) {\r\n return node as HTMLElement;\r\n }\r\n node = (node as ChildNode).parentNode;\r\n }\r\n return null;\r\n }\r\n\r\n /** Enter on an empty last line inside a blockquote exits it into a plain paragraph, mirroring how lists exit on an empty item. */\r\n private tryExitBlockquote(e: KeyboardEvent): void {\r\n const s = window.getSelection();\r\n if (!s || !s.isCollapsed || !s.anchorNode || !this.ed.contains(s.anchorNode)) return;\r\n const block = this.closestBlock(s.anchorNode);\r\n if (!block || block.tagName === 'BLOCKQUOTE' || (block.textContent || '').trim() !== '') return;\r\n const bq = block.closest('blockquote');\r\n if (!bq || !this.ed.contains(bq) || block !== bq.lastElementChild) return;\r\n e.preventDefault();\r\n const p = document.createElement('p');\r\n p.appendChild(document.createElement('br'));\r\n bq.after(p);\r\n block.remove();\r\n if (!bq.firstElementChild) bq.remove();\r\n const r = document.createRange();\r\n r.setStart(p, 0);\r\n r.collapse(true);\r\n s.removeAllRanges();\r\n s.addRange(r);\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private selectedBlocks(): HTMLElement[] {\r\n const s = window.getSelection();\r\n if (!s || !s.rangeCount || !this.ed.contains(s.anchorNode)) return [];\r\n const r = s.getRangeAt(0);\r\n const blocks = Array.from(this.ed.querySelectorAll('p,h1,h2,h3,h4,h5,h6,li,pre,blockquote,td,th')).filter((b) =>\r\n r.intersectsNode(b)\r\n );\r\n if (!blocks.length) {\r\n const b = this.closestBlock(s.anchorNode);\r\n if (b) return [b];\r\n }\r\n return blocks as HTMLElement[];\r\n }\r\n\r\n private onChange(): void {\r\n this.options.onChange(this.ed.innerHTML);\r\n this.scheduleRevision();\r\n this.scheduleDraftSave();\r\n }\r\n\r\n /* ---------------------------------------------------------- revisions / drafts */\r\n private recordRevision(): void {\r\n const html = this.ed.innerHTML;\r\n const last = this.revisions[this.revisions.length - 1];\r\n if (last && last.html === html) return;\r\n this.revisions.push({ time: Date.now(), html });\r\n if (this.revisions.length > 30) this.revisions.shift();\r\n }\r\n\r\n private scheduleRevision(): void {\r\n if (this.revTimer != null) window.clearTimeout(this.revTimer);\r\n this.revTimer = window.setTimeout(() => {\r\n this.revTimer = null;\r\n this.recordRevision();\r\n }, 1500);\r\n }\r\n\r\n private scheduleDraftSave(): void {\r\n if (this.draftTimer != null) window.clearTimeout(this.draftTimer);\r\n this.draftTimer = window.setTimeout(() => {\r\n this.draftTimer = null;\r\n try {\r\n localStorage.setItem(this.draftStorageKey, JSON.stringify({ time: Date.now(), html: this.ed.innerHTML }));\r\n } catch {\r\n /* storage unavailable or full */\r\n }\r\n }, 800);\r\n }\r\n\r\n private revisionDlg(): void {\r\n this.recordRevision();\r\n this.dialog(this.t('revhistory'), (body) => {\r\n if (!this.revisions.length) {\r\n body.innerHTML = `<p style=\"color:#556\">${this.t('revempty')}</p>`;\r\n return;\r\n }\r\n const wrap = document.createElement('div');\r\n wrap.className = 'revwrap';\r\n const list = document.createElement('div');\r\n list.className = 'revlist';\r\n const prev = document.createElement('div');\r\n prev.className = 'revprev';\r\n const restoreBtn = document.createElement('button');\r\n restoreBtn.type = 'button';\r\n restoreBtn.className = 'revrestore';\r\n restoreBtn.textContent = this.t('restore');\r\n let selected = this.revisions.length - 1;\r\n const fmt = new Intl.DateTimeFormat(this.lang === 'ar' ? 'ar-AE' : 'en-GB', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit'\r\n });\r\n const items: Record<number, HTMLButtonElement> = {};\r\n const show = (i: number) => {\r\n selected = i;\r\n this.revisions.forEach((_, j) => items[j]?.classList.toggle('on', j === i));\r\n prev.innerHTML = this.revisions[i].html;\r\n restoreBtn.disabled = i === this.revisions.length - 1;\r\n };\r\n for (let i = this.revisions.length - 1; i >= 0; i--) {\r\n const rev = this.revisions[i];\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n const words = (new DOMParser().parseFromString(rev.html, 'text/html').body.textContent || '').trim();\r\n const wc = words ? words.split(/\\s+/).length : 0;\r\n const isCurrent = i === this.revisions.length - 1;\r\n b.innerHTML = `<span>${isCurrent ? this.t('currentver') : fmt.format(new Date(rev.time))}</span><span class=\"wc\">${wc} ${this.t('words')}</span>`;\r\n b.addEventListener('click', () => show(i));\r\n items[i] = b;\r\n list.appendChild(b);\r\n }\r\n list.append(restoreBtn);\r\n restoreBtn.addEventListener('click', () => {\r\n const rev = this.revisions[selected];\r\n if (!rev) return;\r\n this.recordRevision();\r\n this.setContent(rev.html);\r\n this.recordRevision();\r\n this.closeDlg();\r\n });\r\n wrap.append(list, prev);\r\n body.appendChild(wrap);\r\n show(selected);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- popups / menus */\r\n private closeSub(): void {\r\n this.openSubEl?.remove();\r\n this.openSubEl = null;\r\n }\r\n\r\n private closePop(): void {\r\n this.closeSub();\r\n if (this.openPop) {\r\n this.openPop.remove();\r\n this.openPop = null;\r\n this.popAnchor?.classList.remove('open');\r\n this.popAnchor = null;\r\n /* a menu item's mouseleave never fires once the menu is removed,\r\n so drop any row/column highlight it left behind */\r\n this.setOpTarget(null);\r\n }\r\n }\r\n\r\n private openSubFor(item: MenuItemDef, anchor: HTMLElement): void {\r\n this.closeSub();\r\n const sub = document.createElement('div');\r\n sub.className = 'pop sub';\r\n sub.dir = this.dir();\r\n if (item.subBuild) item.subBuild(sub);\r\n else if (item.sub) this.menuItems(sub, item.sub);\r\n sub.addEventListener('mousedown', (e) => {\r\n if ((e.target as HTMLElement).tagName !== 'INPUT') e.preventDefault();\r\n });\r\n document.body.appendChild(sub);\r\n const r = anchor.getBoundingClientRect();\r\n const isRtl = this.dir() === 'rtl';\r\n // overlap the parent item slightly so the pointer can travel into the flyout\r\n let x = isRtl ? r.left - sub.offsetWidth + 2 : r.right - 2;\r\n x = Math.max(8, Math.min(x + scrollX, scrollX + innerWidth - sub.offsetWidth - 8));\r\n let y = r.top + scrollY - 6;\r\n y = Math.max(8 + scrollY, Math.min(y, scrollY + innerHeight - sub.offsetHeight - 8));\r\n sub.style.left = x + 'px';\r\n sub.style.top = y + 'px';\r\n this.openSubEl = sub;\r\n }\r\n\r\n private popup(anchor: HTMLElement, build: (el: HTMLElement) => void, cls?: string): void {\r\n if (this.openPop && this.popAnchor === anchor) {\r\n this.closePop();\r\n return;\r\n }\r\n this.closePop();\r\n const el = document.createElement('div');\r\n el.className = 'pop' + (cls ? ' ' + cls : '');\r\n el.dir = this.dir();\r\n build(el);\r\n document.body.appendChild(el);\r\n const r = anchor.getBoundingClientRect();\r\n // align the menu with its control: at least as wide as the anchor\r\n el.style.minWidth = Math.max(160, Math.round(r.width)) + 'px';\r\n el.style.top = r.bottom + scrollY + 2 + 'px';\r\n const isRtl = this.dir() === 'rtl';\r\n let x = isRtl ? r.right - el.offsetWidth : r.left;\r\n x = Math.max(8, Math.min(x + scrollX, scrollX + innerWidth - el.offsetWidth - 8));\r\n el.style.left = x + 'px';\r\n el.addEventListener('mousedown', (e) => {\r\n if ((e.target as HTMLElement).tagName !== 'INPUT') e.preventDefault();\r\n });\r\n this.openPop = el;\r\n this.popAnchor = anchor;\r\n anchor.classList.add('open');\r\n }\r\n\r\n private menuItems(el: HTMLElement, items: (MenuItemDef | '|')[]): void {\r\n items.forEach((it) => {\r\n if (it === '|') {\r\n el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\r\n return;\r\n }\r\n const hasSub = !!(it.sub || it.subBuild);\r\n const b = document.createElement('button');\r\n b.className = 'mi' + (it.on ? ' on' : '');\r\n b.innerHTML = `<span class=\"ic\">${it.icon || ''}</span><span class=\"prev\" ${it.previewStyle ? `style=\"${it.previewStyle}\"` : ''\r\n }>${it.label}</span>${it.shortcut ? `<span class=\"sc\">${it.shortcut}</span>` : ''}${hasSub ? `<span class=\"subarrow\">${IC.chev}</span>` : ''\r\n }`;\r\n b.addEventListener('click', () => {\r\n if (!it.action) return;\r\n this.closePop();\r\n it.action();\r\n });\r\n b.addEventListener('mouseenter', () => {\r\n if (hasSub) this.openSubFor(it, b);\r\n else if (this.openSubEl && el !== this.openSubEl) this.closeSub();\r\n it.hover?.(true);\r\n });\r\n b.addEventListener('mouseleave', () => it.hover?.(false));\r\n el.appendChild(b);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- toolbar builders */\r\n private tbtn(icon: string, tip: string, fn: (e?: Event) => void, id?: string): HTMLButtonElement {\r\n const b = document.createElement('button');\r\n b.className = 'tbtn';\r\n b.type = 'button';\r\n b.title = tip;\r\n b.innerHTML = icon;\r\n if (id) b.dataset.id = id;\r\n b.addEventListener('mousedown', (e) => e.preventDefault());\r\n b.addEventListener('click', fn as EventListener);\r\n return b;\r\n }\r\n\r\n /** Font-size increase / decrease step button. */\r\n private stepBtn(delta: number): HTMLButtonElement {\r\n const sign = delta > 0 ? '+' : '−';\r\n const icon = delta > 0 ? IC.fontsizeup : IC.fontsizedown;\r\n const b = this.tbtn(icon, this.t('fontsize') + ' ' + sign, () => this.stepFontSize(delta));\r\n b.addEventListener('mousedown', () => this.saveSel());\r\n return b;\r\n }\r\n\r\n /** Toolbar icon button that opens a popup menu anchored to itself. */\r\n private menuTbtn(icon: string, tip: string, menuFn: (b: HTMLButtonElement) => void, id?: string): HTMLButtonElement {\r\n const b = this.tbtn(icon, tip, () => menuFn(b), id);\r\n b.classList.add('hasmenu');\r\n b.insertAdjacentHTML('beforeend', IC.chev);\r\n b.addEventListener('mousedown', () => this.saveSel());\r\n return b;\r\n }\r\n\r\n /** Quick text-color chips plus a \"more\" chip that opens the full palette. */\r\n private colorChips(): HTMLElement[] {\r\n const chip = (title: string): HTMLButtonElement => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.className = 'cchip';\r\n b.title = title;\r\n b.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n this.saveSel();\r\n });\r\n return b;\r\n };\r\n const chips = QUICK_COLORS.map((c) => {\r\n const b = chip(this.t('forecolor'));\r\n b.style.background = c;\r\n b.addEventListener('click', () => this.applyColor('fore', c));\r\n return b;\r\n });\r\n const more = chip(this.t('forecolor'));\r\n more.classList.add('more');\r\n more.dataset.cb = 'fore';\r\n more.innerHTML = IC.chev;\r\n more.addEventListener('click', () => this.colorMenu(more, 'fore'));\r\n return [...chips, more];\r\n }\r\n\r\n private group(...els: HTMLElement[]): HTMLElement {\r\n const g = document.createElement('div');\r\n g.className = 'tgrp';\r\n els.forEach((e) => {\r\n e.classList.add('gbtn');\r\n g.appendChild(e);\r\n });\r\n return g;\r\n }\r\n\r\n private tsel(cls: string, id: string, defLabel: string, menuFn: (b: HTMLButtonElement) => void): HTMLButtonElement {\r\n const b = document.createElement('button');\r\n b.className = 'tsel ' + cls;\r\n b.type = 'button';\r\n b.dataset.id = id;\r\n b.innerHTML = `<span class=\"lbl empty\">${defLabel || ''}</span>${IC.chev}`;\r\n b.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n this.saveSel();\r\n });\r\n b.addEventListener('click', () => menuFn(b));\r\n return b;\r\n }\r\n\r\n private setListStyle(kind: 'ol' | 'ul', style: string): void {\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s) return;\r\n let list = this.closestBlock(s.anchorNode)?.closest(kind);\r\n if (!list) {\r\n this.exec(kind === 'ol' ? 'insertOrderedList' : 'insertUnorderedList');\r\n list = this.closestBlock(s.anchorNode)?.closest(kind);\r\n }\r\n if (list) (list as HTMLElement).style.listStyleType = style;\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private listMenu(anchor: HTMLButtonElement, kind: 'ul' | 'ol'): void {\r\n const cmd = kind === 'ol' ? 'insertOrderedList' : 'insertUnorderedList';\r\n // the toggle item creates the default style, so it is not repeated below\r\n const styles: [string, string][] =\r\n kind === 'ol'\r\n ? [\r\n ['lower-alpha', IC.ol_alpha],\r\n ['lower-roman', IC.ol_roman],\r\n ['upper-alpha', IC.ol_alphau],\r\n ['upper-roman', IC.ol_romanu]\r\n ]\r\n : [\r\n ['circle', IC.ul_circle],\r\n ['square', IC.ul_square]\r\n ];\r\n const labels = this.tArr(kind === 'ol' ? 'liststyles_ol' : 'liststyles_ul').slice(1);\r\n const sel = window.getSelection();\r\n const listEl = sel ? (this.closestBlock(sel.anchorNode)?.closest(kind) as HTMLElement | null) : null;\r\n const curStyle = listEl ? listEl.style.listStyleType : '';\r\n this.popup(anchor, (el) => {\r\n this.menuItems(el, [\r\n {\r\n label: this.t(kind === 'ol' ? 'numlist' : 'bullist'),\r\n icon: kind === 'ol' ? IC.numlist : IC.bullist,\r\n on: document.queryCommandState(cmd),\r\n action: () => this.exec(cmd)\r\n }\r\n ]);\r\n el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\r\n const grid = document.createElement('div');\r\n grid.className = 'mi-grid';\r\n styles.forEach(([s, icon], i) => {\r\n const b = document.createElement('button');\r\n b.className = 'mi' + (curStyle === s ? ' on' : '');\r\n b.innerHTML = `<span class=\"ic\">${icon}</span><span class=\"prev\">${labels[i]}</span>`;\r\n b.addEventListener('click', () => {\r\n this.closePop();\r\n this.setListStyle(kind, s);\r\n });\r\n grid.appendChild(b);\r\n });\r\n el.appendChild(grid);\r\n });\r\n }\r\n\r\n /** Shared color-picker popup body — swatch grid plus the current-color /\r\n * no-color / custom-picker footer — so the fore/back toolbar menus and the\r\n * table cell-background menu all show the identical popup. */\r\n private buildPaletteInto(el: HTMLElement, curColor: string, apply: (c: string | null) => void): void {\r\n const grid = document.createElement('div');\r\n grid.className = 'cpal';\r\n COLORS.forEach((c) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.style.background = c;\r\n b.title = c;\r\n b.addEventListener('click', () => {\r\n this.closePop();\r\n apply(c);\r\n });\r\n grid.appendChild(b);\r\n });\r\n el.appendChild(grid);\r\n el.insertAdjacentHTML('beforeend', '<div class=\"sep\"></div>');\r\n const foot = document.createElement('div');\r\n foot.className = 'cfoot';\r\n const hex = /^#[0-9a-f]{6}$/i.test(curColor) ? curColor : '#000000';\r\n const cur = document.createElement('div');\r\n cur.className = 'cswatch cur';\r\n cur.title = this.t('currentcolor');\r\n cur.style.background = hex;\r\n cur.innerHTML = IC.check;\r\n const nocolor = document.createElement('button');\r\n nocolor.type = 'button';\r\n nocolor.className = 'cswatch nocolor';\r\n nocolor.title = this.t('removecolor');\r\n nocolor.addEventListener('click', () => {\r\n this.closePop();\r\n apply(null);\r\n });\r\n const wheel = document.createElement('label');\r\n wheel.className = 'cswatch cwheel';\r\n wheel.title = this.t('customcolor');\r\n wheel.innerHTML = IC.palette;\r\n const picker = document.createElement('input');\r\n picker.type = 'color';\r\n picker.value = hex;\r\n picker.addEventListener('change', () => {\r\n this.closePop();\r\n apply(picker.value);\r\n });\r\n wheel.appendChild(picker);\r\n foot.append(cur, nocolor, wheel);\r\n el.appendChild(foot);\r\n }\r\n\r\n private colorMenu(anchor: HTMLButtonElement, kind: 'fore' | 'back'): void {\r\n this.popup(\r\n anchor,\r\n (el) => {\r\n const curColor = kind === 'fore' ? this.foreColor : this.backColor;\r\n this.buildPaletteInto(el, curColor, (c) => this.applyColor(kind, c));\r\n },\r\n kind === 'fore' ? 'pop-forecolor' : 'pop-backcolor'\r\n );\r\n }\r\n\r\n private applyColor(kind: 'fore' | 'back', c: string | null): void {\r\n if (kind === 'fore') {\r\n this.foreColor = c || '#000000';\r\n this.exec('foreColor', c || '#000000');\r\n } else {\r\n this.backColor = c || 'transparent';\r\n this.exec('hiliteColor', c || 'transparent');\r\n }\r\n this.syncColorSwatches(this.toolbar);\r\n if (this.selCtx) this.syncColorSwatches(this.selCtx);\r\n }\r\n\r\n private syncColorSwatches(container: HTMLElement): void {\r\n container.querySelectorAll(`[data-cb=fore]`).forEach((el) => ((el as HTMLElement).style.background = this.foreColor));\r\n container.querySelectorAll(`[data-cb=back]`).forEach((el) => ((el as HTMLElement).style.background = this.backColor));\r\n }\r\n\r\n private fontItems(): MenuItemDef[] {\r\n return this.options.fontFamilyFormats.map(([name, val]) => ({\r\n label: name,\r\n previewStyle: `font-family:${val}`,\r\n on: this.currentFont() === name,\r\n action: () => this.exec('fontName', val)\r\n }));\r\n }\r\n\r\n private fontMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.fontItems()));\r\n }\r\n\r\n private sizeItems(): MenuItemDef[] {\r\n return SIZES.map((s) => ({\r\n label: s,\r\n on: this.currentSize() === s,\r\n action: () => this.applyFontSize(s)\r\n }));\r\n }\r\n\r\n private sizeMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.sizeItems()));\r\n }\r\n\r\n /** Font sizing needs a non-collapsed range. With a bare caret, grow the\r\n selection to the word under it; in an empty spot, select a zero-width\r\n space so the new size applies to what gets typed next. */\r\n private ensureSizeTarget(): void {\r\n const s = window.getSelection();\r\n if (!s) return;\r\n if (!s.rangeCount) {\r\n const r = document.createRange();\r\n r.selectNodeContents(this.ed);\r\n r.collapse(true);\r\n s.addRange(r);\r\n }\r\n if (!s.isCollapsed) return;\r\n const r = s.getRangeAt(0);\r\n const node = r.startContainer;\r\n if (node.nodeType === 3) {\r\n const text = (node as Text).data;\r\n let a = r.startOffset;\r\n let b = r.startOffset;\r\n while (a > 0 && /\\S/.test(text[a - 1])) a--;\r\n while (b < text.length && /\\S/.test(text[b])) b++;\r\n if (b > a) {\r\n const nr = document.createRange();\r\n nr.setStart(node, a);\r\n nr.setEnd(node, b);\r\n s.removeAllRanges();\r\n s.addRange(nr);\r\n this.savedRange = nr.cloneRange();\r\n return;\r\n }\r\n }\r\n const zw = document.createTextNode(String.fromCharCode(0x200b));\r\n r.insertNode(zw);\r\n const nr = document.createRange();\r\n nr.setStart(zw, 0);\r\n nr.setEnd(zw, 1);\r\n s.removeAllRanges();\r\n s.addRange(nr);\r\n this.savedRange = nr.cloneRange();\r\n }\r\n\r\n private applyFontSize(px: string): void {\r\n this.restoreSel();\r\n this.ensureSizeTarget();\r\n document.execCommand('styleWithCSS', false, 'false');\r\n document.execCommand('fontSize', false, '7');\r\n const spans: HTMLSpanElement[] = [];\r\n this.ed.querySelectorAll('font[size=\"7\"]').forEach((f) => {\r\n const span = document.createElement('span');\r\n span.style.fontSize = px;\r\n while (f.firstChild) span.appendChild(f.firstChild);\r\n f.replaceWith(span);\r\n spans.push(span);\r\n });\r\n if (spans.length) {\r\n // keep the selection anchored inside the new spans so the current\r\n // size reads back correctly (e.g. for repeated +/- stepping)\r\n const r = document.createRange();\r\n r.setStart(spans[0], 0);\r\n r.setEnd(spans[spans.length - 1], spans[spans.length - 1].childNodes.length);\r\n const s = window.getSelection();\r\n if (s) {\r\n s.removeAllRanges();\r\n s.addRange(r);\r\n }\r\n }\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private stepFontSize(delta: number): void {\r\n const cur = parseInt(this.currentSize(), 10) || 14;\r\n const next = Math.min(MAX_FONT_PX, Math.max(MIN_FONT_PX, cur + delta));\r\n if (next === cur) return;\r\n this.applyFontSize(next + 'px');\r\n }\r\n\r\n /* ------------------------------------------------ case / spacing / link */\r\n private transformCase(kind: 'lower' | 'upper' | 'capitalize'): void {\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s || !s.rangeCount || s.isCollapsed) return;\r\n const range = s.getRangeAt(0);\r\n const walker = document.createTreeWalker(this.ed, NodeFilter.SHOW_TEXT);\r\n const nodes: Text[] = [];\r\n let n: Node | null;\r\n while ((n = walker.nextNode())) if (range.intersectsNode(n)) nodes.push(n as Text);\r\n nodes.forEach((t) => {\r\n const start = t === range.startContainer ? range.startOffset : 0;\r\n const end = t === range.endContainer ? range.endOffset : t.data.length;\r\n if (end <= start) return;\r\n const mid = t.data.slice(start, end);\r\n let out = mid;\r\n if (kind === 'lower') out = mid.toLowerCase();\r\n else if (kind === 'upper') out = mid.toUpperCase();\r\n else out = mid.replace(/(^|\\s)(\\S)/g, (m, sp, ch) => sp + ch.toUpperCase());\r\n t.replaceData(start, end - start, out);\r\n });\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private caseItems(): MenuItemDef[] {\r\n return [\r\n { label: this.t('lowercase'), icon: IC.lowercaseic, action: () => this.transformCase('lower') },\r\n { label: this.t('uppercase'), icon: IC.uppercaseic, action: () => this.transformCase('upper') },\r\n { label: this.t('capitalize'), icon: IC.capitalizeic, action: () => this.transformCase('capitalize') }\r\n ];\r\n }\r\n\r\n private caseMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.caseItems()));\r\n }\r\n\r\n private applyBlockStyle(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing', value: string): void {\r\n this.restoreSel();\r\n const blocks = this.selectedBlocks();\r\n const cssProp = prop === 'lineHeight' ? 'line-height' : prop === 'wordSpacing' ? 'word-spacing' : 'letter-spacing';\r\n blocks.forEach((b) => {\r\n if (value) b.style[prop] = value;\r\n else b.style.removeProperty(cssProp);\r\n });\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private currentBlockStyle(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing'): string {\r\n const s = window.getSelection();\r\n const b = s ? this.closestBlock(s.anchorNode) : null;\r\n return b ? b.style[prop] || '' : '';\r\n }\r\n\r\n private blockStyleItems(prop: 'lineHeight' | 'wordSpacing' | 'letterSpacing', values: string[]): MenuItemDef[] {\r\n const cur = this.currentBlockStyle(prop);\r\n return [\r\n { label: this.t('normal'), on: !cur, action: () => this.applyBlockStyle(prop, '') },\r\n ...values.map((v) => ({\r\n label: v,\r\n on: cur === v,\r\n action: () => this.applyBlockStyle(prop, v)\r\n }))\r\n ];\r\n }\r\n\r\n private lineHeightMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('lineHeight', LINE_HEIGHTS)));\r\n }\r\n\r\n private wordSpacingMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('wordSpacing', WORD_SPACINGS)));\r\n }\r\n\r\n private letterSpacingMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockStyleItems('letterSpacing', LETTER_SPACINGS)));\r\n }\r\n\r\n private closestAnchor(): HTMLAnchorElement | null {\r\n const s = window.getSelection();\r\n let node: Node | null = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && (node as HTMLElement).tagName === 'A') return node as HTMLAnchorElement;\r\n node = node.parentNode;\r\n }\r\n return null;\r\n }\r\n\r\n private linkDlg(): void {\r\n this.saveSel();\r\n const anchorEl = this.closestAnchor();\r\n let urlIn: HTMLInputElement;\r\n const buttons: DialogButton[] = [];\r\n if (anchorEl) {\r\n buttons.push({\r\n label: this.t('unlink'),\r\n action: () => {\r\n const r = document.createRange();\r\n r.selectNodeContents(anchorEl);\r\n const s = window.getSelection();\r\n if (s) {\r\n s.removeAllRanges();\r\n s.addRange(r);\r\n }\r\n document.execCommand('unlink');\r\n this.closeDlg();\r\n this.onChange();\r\n }\r\n });\r\n }\r\n buttons.push(\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n const url = urlIn.value.trim();\r\n this.closeDlg();\r\n if (!url) return;\r\n if (anchorEl) {\r\n anchorEl.setAttribute('href', url);\r\n this.onChange();\r\n return;\r\n }\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s || s.isCollapsed) {\r\n document.execCommand('insertHTML', false, `<a href=\"${url.replace(/\"/g, '"')}\">${url\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')}</a>`);\r\n } else {\r\n document.execCommand('styleWithCSS', false, 'false');\r\n document.execCommand('createLink', false, url);\r\n }\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n }\r\n );\r\n this.dialog(\r\n this.t('linkttl'),\r\n (body) => {\r\n const row = document.createElement('div');\r\n row.style.cssText = 'display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px';\r\n const lbl = document.createElement('span');\r\n lbl.style.cssText = 'width:60px;color:#556;flex:none';\r\n lbl.textContent = this.t('linkurl');\r\n urlIn = document.createElement('input');\r\n urlIn.type = 'url';\r\n urlIn.placeholder = 'https://';\r\n urlIn.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit';\r\n urlIn.value = anchorEl?.getAttribute('href') || '';\r\n row.append(lbl, urlIn);\r\n body.appendChild(row);\r\n setTimeout(() => urlIn.focus(), 0);\r\n },\r\n buttons\r\n );\r\n }\r\n\r\n private blockItems(): MenuItemDef[] {\r\n return BLOCKS.map(([tag]) => ({\r\n label: this.blockLabel(tag),\r\n previewStyle: tag.startsWith('h')\r\n ? `font-weight:700;font-size:${22 - 2 * (+tag[1])}px`\r\n : tag === 'pre'\r\n ? 'font-family:monospace'\r\n : '',\r\n on: this.currentBlock() === tag,\r\n action: () => this.exec('formatBlock', '<' + tag + '>')\r\n }));\r\n }\r\n\r\n private blocksMenu(anchor: HTMLButtonElement): void {\r\n this.popup(anchor, (el) => this.menuItems(el, this.blockItems()));\r\n }\r\n\r\n private alignItems(): MenuItemDef[] {\r\n const cmds: ['justifyLeft' | 'justifyCenter' | 'justifyRight' | 'justifyFull', keyof I18nStrings, string][] = [\r\n ['justifyLeft', 'alignleft', IC.alignleft],\r\n ['justifyCenter', 'aligncenter', IC.aligncenter],\r\n ['justifyRight', 'alignright', IC.alignright],\r\n ['justifyFull', 'alignjustify', IC.alignjustify]\r\n ];\r\n return cmds.map(([cmd, key, icon]) => ({\r\n label: this.t(key),\r\n icon,\r\n on: document.queryCommandState(cmd),\r\n action: () => this.exec(cmd)\r\n }));\r\n }\r\n\r\n private blockLabel(tag: string): string {\r\n if (tag === 'p') return this.t('para');\r\n if (tag === 'pre') return this.t('pre');\r\n return this.t('heading') + ' ' + tag[1];\r\n }\r\n\r\n private tableGrid(anchor: HTMLElement, after?: () => void): void {\r\n this.popup(anchor, (el) => this.buildTableGridInto(el, after));\r\n }\r\n\r\n private buildTableGridInto(el: HTMLElement, after?: () => void): void {\r\n {\r\n const wrap = document.createElement('div');\r\n wrap.className = 'tgridwrap';\r\n const grid = document.createElement('div');\r\n grid.className = 'tgrid';\r\n const lbl = document.createElement('div');\r\n lbl.className = 'tgridlbl';\r\n lbl.textContent = '1 × 1';\r\n const cells: HTMLSpanElement[] = [];\r\n for (let r = 0; r < 8; r++)\r\n for (let c = 0; c < 10; c++) {\r\n const sp = document.createElement('span');\r\n sp.dataset.r = String(r);\r\n sp.dataset.c = String(c);\r\n sp.addEventListener('mouseenter', () => {\r\n cells.forEach((x) => x.classList.toggle('hot', +x.dataset.r! <= r && +x.dataset.c! <= c));\r\n lbl.textContent = c + 1 + ' × ' + (r + 1);\r\n });\r\n sp.addEventListener('click', () => {\r\n this.closePop();\r\n this.insertTable(r + 1, c + 1);\r\n after?.();\r\n });\r\n cells.push(sp);\r\n grid.appendChild(sp);\r\n }\r\n wrap.append(grid, lbl);\r\n el.appendChild(wrap);\r\n }\r\n }\r\n\r\n private insertTable(rows: number, cols: number): void {\r\n this.restoreSel();\r\n /* table-layout:fixed keeps the columns evenly sized while typing —\r\n text wraps at the column edge instead of widening the column */\r\n let html = '<table style=\"border-collapse:collapse;width:100%;table-layout:fixed\"><tbody>';\r\n for (let r = 0; r < rows; r++) {\r\n html += '<tr>';\r\n for (let c = 0; c < cols; c++) html += '<td style=\"border:1px solid #b9c2cc\"><br></td>';\r\n html += '</tr>';\r\n }\r\n html += '</tbody></table><p><br></p>';\r\n document.execCommand('insertHTML', false, html);\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private setDir(dir: 'ltr' | 'rtl'): void {\r\n this.restoreSel();\r\n const blocks = this.selectedBlocks();\r\n if (blocks.length) blocks.forEach((b) => b.setAttribute('dir', dir));\r\n else this.ed.setAttribute('dir', dir);\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n /** Splits a toolbar layout string into groups of item names: `|` separates visual\r\n * groups, whitespace separates items within a group. Empty groups/tokens (e.g. from\r\n * leading/trailing/doubled separators) are dropped. Pure function. */\r\n private parseToolbarString(spec: string): string[][] {\r\n return spec\r\n .split('|')\r\n .map((group) => group.trim().split(/\\s+/).filter(Boolean))\r\n .filter((group) => group.length > 0);\r\n }\r\n\r\n /** Maps every supported toolbar item name to a builder for that one control. Each\r\n * entry is a direct lift of what used to be an inline call in `buildToolbar()` — no\r\n * behavior changes, just named lookup. Only `forecolor` yields multiple elements\r\n * (the quick color chips); everything else yields one. */\r\n private buildToolbarRegistry(): Record<string, () => HTMLElement | HTMLElement[]> {\r\n const tableBtn = this.tbtn(IC.tableic, this.t('quicktable'), () => this.tableGrid(tableBtn));\r\n const registry: Record<string, () => HTMLElement | HTMLElement[]> = {\r\n undo: () => this.tbtn(IC.undo, this.t('undo'), () => this.exec('undo')),\r\n redo: () => this.tbtn(IC.redo, this.t('redo'), () => this.exec('redo')),\r\n preview: () => this.tbtn(IC.prevw, this.t('preview'), () => this.previewDlg()),\r\n print: () => this.tbtn(IC.printic, this.t('print'), () => this.printDoc()),\r\n importword: () => this.tbtn(IC.wordic, this.t('importword'), () => this.pickWordDoc()),\r\n revhistory: () => this.tbtn(IC.historyic, this.t('revhistory'), () => this.revisionDlg()),\r\n fontfamily: () => this.tsel('w-font', 'fontsel', '', (b) => this.fontMenu(b)),\r\n fontsize: () => this.tsel('w-size', 'sizesel', '', (b) => this.sizeMenu(b)),\r\n fontsizeincrease: () => this.stepBtn(1),\r\n fontsizedecrease: () => this.stepBtn(-1),\r\n bold: () => this.tbtn(IC.bold, this.t('bold'), () => this.exec('bold'), 'bold'),\r\n italic: () => this.tbtn(IC.italic, this.t('italic'), () => this.exec('italic'), 'italic'),\r\n underline: () => this.tbtn(IC.underline, this.t('underline'), () => this.exec('underline'), 'underline'),\r\n strikethrough: () => this.tbtn(IC.strikethrough, this.t('strikethrough'), () => this.exec('strikeThrough'), 'strikeThrough'),\r\n forecolor: () => this.colorChips(),\r\n backcolor: () =>\r\n this.menuTbtn(\r\n IC.backcolor + '<span class=\"colorbar\" data-cb=\"back\"></span>',\r\n this.t('backcolor'),\r\n (b) => this.colorMenu(b, 'back')\r\n ),\r\n alignleft: () => this.tbtn(IC.alignleft, this.t('alignleft'), () => this.exec('justifyLeft'), 'justifyLeft'),\r\n aligncenter: () => this.tbtn(IC.aligncenter, this.t('aligncenter'), () => this.exec('justifyCenter'), 'justifyCenter'),\r\n alignright: () => this.tbtn(IC.alignright, this.t('alignright'), () => this.exec('justifyRight'), 'justifyRight'),\r\n alignjustify: () => this.tbtn(IC.alignjustify, this.t('alignjustify'), () => this.exec('justifyFull'), 'justifyFull'),\r\n bullist: () => this.menuTbtn(IC.bullist, this.t('bullist'), (b) => this.listMenu(b, 'ul'), 'insertUnorderedList'),\r\n numlist: () => this.menuTbtn(IC.numlist, this.t('numlist'), (b) => this.listMenu(b, 'ol'), 'insertOrderedList'),\r\n outdent: () => this.tbtn(IC.outdent, this.t('outdent'), () => this.exec('outdent')),\r\n indent: () => this.tbtn(IC.indent, this.t('indent'), () => this.exec('indent')),\r\n link: () => this.tbtn(IC.link, this.t('linkttl'), () => this.linkDlg()),\r\n blockquote: () => this.tbtn(IC.quote, this.t('quote'), () => this.toggleBlock('blockquote'), 'blockquote'),\r\n code: () => this.tbtn(IC.inlinecodeic, this.t('code'), () => this.toggleInlineCode(), 'code'),\r\n codesample: () => this.tbtn(IC.codesampleic, this.t('codesample'), () => this.codeDlg()),\r\n changecase: () => this.menuTbtn(IC.caseic, this.t('changecase'), (b) => this.caseMenu(b)),\r\n lineheight: () => this.menuTbtn(IC.lineheight, this.t('lineheight'), (b) => this.lineHeightMenu(b)),\r\n wordspacing: () => this.menuTbtn(IC.wordspacing, this.t('wordspacing'), (b) => this.wordSpacingMenu(b)),\r\n letterspacing: () => this.menuTbtn(IC.letterspacing, this.t('letterspacing'), (b) => this.letterSpacingMenu(b)),\r\n removeformat: () => this.tbtn(IC.clearformatic, this.t('removeformat'), () => this.exec('removeFormat')),\r\n blocks: () => this.tsel('w-block', 'blocksel', this.t('para'), (b) => this.blocksMenu(b)),\r\n ltr: () => this.tbtn(IC.ltr, this.t('ltr'), () => this.setDir('ltr'), 'ltr'),\r\n rtl: () => this.tbtn(IC.rtl, this.t('rtl'), () => this.setDir('rtl'), 'rtl'),\r\n quickimage: () => this.tbtn(IC.image, this.t('quickimage'), () => this.insertImagePlaceholder()),\r\n quickvideo: () => this.tbtn(IC.video, this.t('quickvideo'), () => this.videoDlg()),\r\n quicktable: () => tableBtn,\r\n template: () => this.menuTbtn(IC.templateic, this.t('template'), (b) => this.templateMenu(b)),\r\n charmap: () => this.tbtn(IC.charic, this.t('charmap'), () => this.charMap()),\r\n emoji: () => this.tbtn(IC.emojiic, this.t('emoji'), () => this.emojiMap()),\r\n fullscreen: () => this.tbtn(IC.fullscreen, this.t('fullscreen'), () => this.toggleFullscreen(), 'fullscreen'),\r\n sourcecode: () => this.tbtn(IC.srcic, this.t('sourcecode'), () => this.sourceDlg())\r\n };\r\n /* TinyMCE-compatible aliases so common TinyMCE toolbar strings\r\n (e.g. \"undo redo | styles | ... | link image media\") work as-is */\r\n registry.styles = registry.blocks;\r\n registry.image = registry.quickimage;\r\n registry.media = registry.quickvideo;\r\n registry.table = registry.quicktable;\r\n return registry;\r\n }\r\n\r\n private buildToolbar(): void {\r\n this.toolbar.innerHTML = '';\r\n const spec = this.options.toolbar === true ? DEFAULT_TOOLBAR : (this.options.toolbar as string);\r\n const registry = this.buildToolbarRegistry();\r\n this.parseToolbarString(spec).forEach((tokens) => {\r\n const elements: HTMLElement[] = [];\r\n tokens.forEach((token) => {\r\n const builder = registry[token];\r\n if (!builder) {\r\n console.warn(`FableEditor: unknown toolbar item \"${token}\"`);\r\n return;\r\n }\r\n const result = builder();\r\n if (Array.isArray(result)) elements.push(...result);\r\n else elements.push(result);\r\n });\r\n if (elements.length) this.toolbar.appendChild(this.group(...elements));\r\n });\r\n this.tbrMore = this.tbtn(IC.more, this.t('more'), () => {\r\n this.tbrExpanded = !this.tbrExpanded;\r\n this.updateToolbarOverflow();\r\n });\r\n this.tbrMore.classList.add('tbr-more');\r\n this.toolbar.appendChild(this.tbrMore);\r\n this.syncColorSwatches(this.toolbar);\r\n this.updateToolbarOverflow();\r\n }\r\n\r\n /** xs/sm/md editors (< 992px wide) collapse an overflowing toolbar to one row +\r\n * \"…\" expander; at lg widths and up the toolbar wraps to multiple rows as before. */\r\n private static readonly TBR_COLLAPSE_MAX = 992;\r\n\r\n /** Responsive one-line toolbar: on mobile/tablet widths (or a narrow host\r\n * container) a toolbar that can't fit on a single row collapses to one\r\n * clipped row plus a trailing \"…\" button that expands/collapses the full\r\n * set. Driven by the editor's own width, so it also applies to narrow\r\n * panels on desktop. */\r\n private updateToolbarOverflow(): void {\r\n const tb = this.toolbar;\r\n if (!this.tbrMore) return;\r\n tb.classList.add('tbr-measure');\r\n const overflows = tb.scrollWidth > tb.clientWidth + 1;\r\n tb.classList.remove('tbr-measure');\r\n const narrow = this.shell.offsetWidth < FableEditor.TBR_COLLAPSE_MAX;\r\n if (!overflows || !narrow) {\r\n this.tbrExpanded = false;\r\n tb.classList.remove('collapsible', 'expanded');\r\n this.tbrMore.classList.remove('on');\r\n return;\r\n }\r\n tb.classList.add('collapsible');\r\n tb.classList.toggle('expanded', this.tbrExpanded);\r\n this.tbrMore.classList.toggle('on', this.tbrExpanded);\r\n }\r\n\r\n /* ---------------------------------------------------------- menubar */\r\n private mItem(label: keyof I18nStrings, icon: string | undefined, action: () => void, shortcut?: string): MenuItemDef {\r\n return { label: this.t(label), icon, action, shortcut };\r\n }\r\n\r\n private buildMenubar(): void {\r\n this.menubar.innerHTML = '';\r\n const menus: Record<string, (MenuItemDef | '|')[]> = {\r\n file: [\r\n this.mItem('newdoc', IC.newic, () => {\r\n this.recordRevision();\r\n this.ed.innerHTML = '<p><br></p>';\r\n this.onChange();\r\n }),\r\n '|',\r\n this.mItem('importword', IC.wordic, () => this.pickWordDoc()),\r\n this.mItem('restoredraft', IC.draftic, () => {\r\n if (!this.restoreDraft()) alert(this.t('draftempty'));\r\n }),\r\n this.mItem('revhistory', IC.historyic, () => this.revisionDlg()),\r\n '|',\r\n this.mItem('preview', IC.prevw, () => this.previewDlg()),\r\n this.mItem('print', IC.printic, () => this.printDoc(), 'Ctrl+P')\r\n ],\r\n edit: [\r\n this.mItem('undo', IC.undo, () => this.exec('undo'), 'Ctrl+Z'),\r\n this.mItem('redo', IC.redo, () => this.exec('redo'), 'Ctrl+Y'),\r\n '|',\r\n this.mItem('cut', IC.cutic, () => this.exec('cut'), 'Ctrl+X'),\r\n this.mItem('copy', IC.copyic, () => this.exec('copy'), 'Ctrl+C'),\r\n this.mItem('paste', IC.pasteic, () => alert(this.t('pastehint')), 'Ctrl+V'),\r\n '|',\r\n this.mItem('selectall', IC.selall, () => this.exec('selectAll'), 'Ctrl+A')\r\n ],\r\n view: [\r\n this.mItem('fullscreen', IC.fullscreen, () => this.toggleFullscreen()),\r\n this.mItem('preview', IC.prevw, () => this.previewDlg()),\r\n this.mItem('sourcecode', IC.srcic, () => this.sourceDlg())\r\n ],\r\n insert: [\r\n this.mItem('link', IC.link, () => this.linkDlg()),\r\n this.mItem('image', IC.image, () => this.insertImagePlaceholder()),\r\n this.mItem('video', IC.video, () => this.videoDlg()),\r\n { label: this.t('inserttable'), icon: IC.tableic, action: () => this.tableGrid((this.menubar.querySelector('[data-menu-key=\"table\"]') as HTMLElement) || this.menubar) },\r\n this.mItem('codesample', IC.codesampleic, () => this.codeDlg()),\r\n { label: this.t('template'), icon: IC.templateic, subBuild: (el) => this.buildTemplatePickInto(el) },\r\n this.mItem('hr', IC.hric, () => this.exec('insertHorizontalRule')),\r\n '|',\r\n this.mItem('charmap', IC.charic, () => this.charMap()),\r\n this.mItem('emoji', IC.emojiic, () => this.emojiMap()),\r\n this.mItem('datetime', IC.dateic, () =>\r\n this.exec('insertText', new Date().toLocaleString(this.lang === 'ar' ? 'ar-AE' : 'en-GB'))\r\n ),\r\n '|',\r\n {\r\n label: this.t('pagebreak'),\r\n icon: IC.pbic,\r\n action: () => {\r\n this.restoreSel();\r\n document.execCommand('insertHTML', false, '<hr class=\"pagebreak\"><p><br></p>');\r\n this.onChange();\r\n }\r\n },\r\n this.mItem('nbsp', IC.nbspic, () => this.exec('insertText', '\\u00A0'))\r\n ],\r\n format: [\r\n this.mItem('bold', IC.bold, () => this.exec('bold'), 'Ctrl+B'),\r\n this.mItem('italic', IC.italic, () => this.exec('italic'), 'Ctrl+I'),\r\n this.mItem('underline', IC.underline, () => this.exec('underline'), 'Ctrl+U'),\r\n this.mItem('strikethrough', IC.strikethrough, () => this.exec('strikeThrough')),\r\n this.mItem('superscript', IC.superscriptic, () => this.exec('superscript')),\r\n this.mItem('subscript', IC.subscriptic, () => this.exec('subscript')),\r\n this.mItem('code', IC.inlinecodeic, () => this.toggleInlineCode()),\r\n this.mItem('quote', IC.quote, () => this.toggleBlock('blockquote')),\r\n '|',\r\n { label: this.t('fontfamily'), subBuild: (el) => this.menuItems(el, this.fontItems()) },\r\n { label: this.t('fontsize'), subBuild: (el) => this.menuItems(el, this.sizeItems()) },\r\n { label: this.t('blocks'), subBuild: (el) => this.menuItems(el, this.blockItems()) },\r\n { label: this.t('align'), subBuild: (el) => this.menuItems(el, this.alignItems()) },\r\n { label: this.t('lineheight'), icon: IC.lineheight, subBuild: (el) => this.menuItems(el, this.blockStyleItems('lineHeight', LINE_HEIGHTS)) },\r\n { label: this.t('wordspacing'), icon: IC.wordspacing, subBuild: (el) => this.menuItems(el, this.blockStyleItems('wordSpacing', WORD_SPACINGS)) },\r\n { label: this.t('letterspacing'), icon: IC.letterspacing, subBuild: (el) => this.menuItems(el, this.blockStyleItems('letterSpacing', LETTER_SPACINGS)) },\r\n '|',\r\n { label: this.t('forecolor'), icon: IC.palette, subBuild: (el) => this.buildPaletteInto(el, this.foreColor, (c) => this.applyColor('fore', c)) },\r\n { label: this.t('backcolor'), icon: IC.backcolor, subBuild: (el) => this.buildPaletteInto(el, this.backColor, (c) => this.applyColor('back', c)) },\r\n '|',\r\n this.mItem('bullist', IC.bullist, () => this.exec('insertUnorderedList')),\r\n this.mItem('numlist', IC.numlist, () => this.exec('insertOrderedList')),\r\n this.mItem('outdent', IC.outdent, () => this.exec('outdent')),\r\n this.mItem('indent', IC.indent, () => this.exec('indent')),\r\n '|',\r\n this.mItem('ltr', IC.ltr, () => this.setDir('ltr')),\r\n this.mItem('rtl', IC.rtl, () => this.setDir('rtl')),\r\n '|',\r\n { label: this.t('changecase'), icon: IC.caseic, sub: this.caseItems() },\r\n '|',\r\n this.mItem('clearformat', IC.clearformatic, () => this.exec('removeFormat'))\r\n ],\r\n tools: [this.mItem('sourcecode', IC.srcic, () => this.sourceDlg()), this.mItem('wordcount', IC.wcic, () => this.wordCountDlg())],\r\n table: [\r\n { label: this.t('inserttable'), icon: IC.tableic, subBuild: (el) => this.buildTableGridInto(el) },\r\n '|',\r\n {\r\n label: this.t('cell'),\r\n sub: [\r\n { label: this.t('cellprops'), icon: IC.tableic, action: () => this.cellPropsDlg() },\r\n { label: this.t('cellbg'), icon: IC.palette, subBuild: (el) => this.buildCellFillInto(el) }\r\n ]\r\n },\r\n {\r\n label: this.t('row'),\r\n sub: [\r\n { label: this.t('rowabove'), icon: IC.rowbefore, action: () => this.tableOp('rowabove'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n { label: this.t('rowbelow'), icon: IC.rowafter, action: () => this.tableOp('rowbelow'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n { label: this.t('delrow'), icon: IC.rowdelete, action: () => this.tableOp('delrow'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n '|',\r\n { label: this.t('moverowup'), icon: IC.moverowup, action: () => this.tableMove('rowup'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n { label: this.t('moverowdown'), icon: IC.moverowdown, action: () => this.tableMove('rowdown'), hover: (on) => this.setOpTarget(on ? 'row' : null) },\r\n '|',\r\n { label: this.t('rowprops'), icon: IC.tableic, action: () => this.rowPropsDlg(), hover: (on) => this.setOpTarget(on ? 'row' : null) }\r\n ]\r\n },\r\n {\r\n label: this.t('column'),\r\n sub: [\r\n { label: this.t('colbefore'), icon: IC.colbefore, action: () => this.tableOp('colbefore'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n { label: this.t('colafter'), icon: IC.colafter, action: () => this.tableOp('colafter'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n { label: this.t('delcol'), icon: IC.coldelete, action: () => this.tableOp('delcol'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n '|',\r\n { label: this.t('movecolleft'), icon: IC.movecolleft, action: () => this.tableMove('colleft'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n { label: this.t('movecolright'), icon: IC.movecolright, action: () => this.tableMove('colright'), hover: (on) => this.setOpTarget(on ? 'col' : null) },\r\n '|',\r\n { label: this.t('colprops'), icon: IC.tableic, action: () => this.colPropsDlg(), hover: (on) => this.setOpTarget(on ? 'col' : null) }\r\n ]\r\n },\r\n '|',\r\n {\r\n label: this.t('tablepropsttl'),\r\n icon: IC.tableic,\r\n action: () => {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n this.tblActive = cell.closest('table');\r\n this.tablePropsDlg();\r\n }\r\n },\r\n { label: this.t('deltable'), icon: IC.trash, action: () => this.tableOp('deltable') }\r\n ],\r\n help: [this.mItem('helpttl', IC.helpic, () => this.helpDlg(), 'Alt+0')]\r\n };\r\n const spec = this.options.menubar === true ? DEFAULT_MENUBAR : (this.options.menubar as string);\r\n const seen = new Set<string>();\r\n spec\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n .forEach((key) => {\r\n if (seen.has(key)) return;\r\n seen.add(key);\r\n if (!menus[key]) {\r\n console.warn(`FableEditor: unknown menubar item \"${key}\"`);\r\n return;\r\n }\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = this.t(key as keyof I18nStrings);\r\n b.dataset.menuKey = key;\r\n b.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n this.saveSel();\r\n });\r\n b.addEventListener('click', () => this.popup(b, (el) => this.menuItems(el, menus[key])));\r\n this.menubar.appendChild(b);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- table ops */\r\n private tableOp(op: string): void {\r\n this.restoreSel();\r\n const s = window.getSelection();\r\n if (!s) return;\r\n const cell =\r\n this.closestBlock(s.anchorNode)?.closest('td,th') ||\r\n (s.anchorNode && (s.anchorNode as Element).nodeType === 1 ? (s.anchorNode as Element).closest?.('td,th') : null);\r\n if (!cell) return;\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n const table = cell.closest('table') as HTMLTableElement;\r\n const idx = Array.from(row.children).indexOf(cell as HTMLTableCellElement);\r\n const newRow = () => {\r\n const r = row.cloneNode(false) as HTMLTableRowElement;\r\n Array.from(row.children).forEach((src) => {\r\n const td = document.createElement('td');\r\n /* carry the source cell's inline style so borders / padding /\r\n column widths survive on inserted rows */\r\n const st = (src as HTMLElement).getAttribute('style');\r\n if (st) td.setAttribute('style', st);\r\n td.style.removeProperty('background-color');\r\n td.innerHTML = '<br>';\r\n r.appendChild(td);\r\n });\r\n return r;\r\n };\r\n if (op === 'rowabove') row.before(newRow());\r\n if (op === 'rowbelow') row.after(newRow());\r\n if (op === 'delrow') {\r\n const body = row.parentElement!;\r\n row.remove();\r\n if (!body.querySelector('tr')) table.remove();\r\n }\r\n if (op === 'colbefore' || op === 'colafter') {\r\n table.querySelectorAll('tr').forEach((tr) => {\r\n const ref = tr.children[Math.min(idx, tr.children.length - 1)] as HTMLElement;\r\n const td = document.createElement('td');\r\n /* carry the reference cell's inline style so borders / padding\r\n survive on inserted columns; width is dropped so the new\r\n column shares the table space instead of doubling it */\r\n const st = ref.getAttribute('style');\r\n if (st) td.setAttribute('style', st);\r\n td.style.removeProperty('width');\r\n td.style.removeProperty('background-color');\r\n td.innerHTML = '<br>';\r\n op === 'colbefore' ? ref.before(td) : ref.after(td);\r\n });\r\n }\r\n if (op === 'delcol') {\r\n table.querySelectorAll('tr').forEach((tr) => tr.children[idx]?.remove());\r\n if (!table.querySelector('td,th')) table.remove();\r\n }\r\n if (op === 'deltable') table.remove();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n\r\n /** Reorders the current row/column: 'rowup'/'rowdown' swap the caret's row with\r\n * its neighbour, 'colleft'/'colright' move the caret's column one position in\r\n * DOM order across every row. The caret travels with the moved cell. */\r\n private tableMove(op: 'rowup' | 'rowdown' | 'colleft' | 'colright'): void {\r\n this.restoreSel();\r\n const cell = this.currentCell();\r\n if (!cell) return;\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n const table = cell.closest('table') as HTMLTableElement;\r\n const idx = Array.from(row.children).indexOf(cell);\r\n if (op === 'rowup') {\r\n const prev = row.previousElementSibling;\r\n if (prev) prev.before(row);\r\n }\r\n if (op === 'rowdown') {\r\n const next = row.nextElementSibling;\r\n if (next) next.after(row);\r\n }\r\n if (op === 'colleft' && idx > 0) {\r\n table.querySelectorAll('tr').forEach((tr) => {\r\n const c = tr.children[idx];\r\n const prev = tr.children[idx - 1];\r\n if (c && prev) prev.before(c);\r\n });\r\n }\r\n if (op === 'colright') {\r\n table.querySelectorAll('tr').forEach((tr) => {\r\n const c = tr.children[idx];\r\n const next = tr.children[idx + 1];\r\n if (c && next) next.after(c);\r\n });\r\n }\r\n /* moving a node resets live ranges inside it (they collapse to the old\r\n parent), so put the caret back into the moved cell explicitly — this is\r\n what lets the user click \"move\" repeatedly to walk a row/column along */\r\n const range = document.createRange();\r\n range.selectNodeContents(cell);\r\n range.collapse(true);\r\n const s = window.getSelection();\r\n if (s) {\r\n s.removeAllRanges();\r\n s.addRange(range);\r\n }\r\n this.saveSel();\r\n this.onChange();\r\n this.positionTableHandles();\r\n this.positionCellMarker();\r\n }\r\n\r\n /** Align the whole table via auto margins — same semantics as the align\r\n * field in the table-properties dialog. */\r\n private alignTable(align: 'left' | 'center' | 'right'): void {\r\n const table = this.tblActive;\r\n if (!table) return;\r\n table.style.marginLeft = align === 'left' ? '0' : 'auto';\r\n table.style.marginRight = align === 'right' ? '0' : 'auto';\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n\r\n /** Color grid applying a background to the caret's cell — the direct way to\r\n * build header rows (the toolbar's backcolor highlights text, not cells). */\r\n private buildCellFillInto(el: HTMLElement): void {\r\n const apply = (c: string | null) => {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n this.setOrClear(cell, 'background-color', c || '');\r\n this.onChange();\r\n };\r\n const cell = this.currentCell();\r\n this.buildPaletteInto(el, this.cssToHex(cell ? cell.style.backgroundColor : ''), apply);\r\n }\r\n\r\n /** style.backgroundColor reads back as rgb(...) — normalise to #rrggbb for the picker. */\r\n private cssToHex(c: string): string {\r\n const m = c.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n return m ? '#' + m.slice(1, 4).map((n) => (+n).toString(16).padStart(2, '0')).join('') : c;\r\n }\r\n\r\n private cellFillMenu(anchor: HTMLElement): void {\r\n this.popup(anchor, (el) => this.buildCellFillInto(el), 'pop-cellbg');\r\n }\r\n\r\n private applyTableProps(table: HTMLTableElement, vals: Record<string, string>): void {\r\n if (vals.width) table.style.width = /^\\d+$/.test(vals.width) ? vals.width + 'px' : vals.width;\r\n else table.style.removeProperty('width');\r\n\r\n const cells = Array.from(table.querySelectorAll('td,th')) as HTMLElement[];\r\n if (vals.cellpadding !== '') cells.forEach((c) => (c.style.padding = vals.cellpadding + 'px'));\r\n else cells.forEach((c) => c.style.removeProperty('padding'));\r\n\r\n if (vals.cellspacing !== '') {\r\n table.style.borderCollapse = 'separate';\r\n table.style.borderSpacing = vals.cellspacing + 'px';\r\n } else {\r\n table.style.borderCollapse = 'collapse';\r\n table.style.removeProperty('border-spacing');\r\n }\r\n\r\n if (vals.border !== '' && +vals.border > 0) {\r\n table.style.border = vals.border + 'px solid #b9c2cc';\r\n cells.forEach((c) => (c.style.border = vals.border + 'px solid #b9c2cc'));\r\n } else {\r\n table.style.removeProperty('border');\r\n cells.forEach((c) => c.style.removeProperty('border'));\r\n }\r\n\r\n table.style.removeProperty('margin-left');\r\n table.style.removeProperty('margin-right');\r\n if (vals.align === 'center') {\r\n table.style.marginLeft = 'auto';\r\n table.style.marginRight = 'auto';\r\n } else if (vals.align === 'right') {\r\n table.style.marginLeft = 'auto';\r\n table.style.marginRight = '0';\r\n } else if (vals.align === 'left') {\r\n table.style.marginLeft = '0';\r\n table.style.marginRight = 'auto';\r\n }\r\n }\r\n\r\n private tablePropsDlg(): void {\r\n const table = this.tblActive;\r\n if (!table) return;\r\n let wIn: HTMLInputElement;\r\n let padIn: HTMLInputElement;\r\n let spIn: HTMLInputElement;\r\n let bIn: HTMLInputElement;\r\n let alignSel: HTMLSelectElement;\r\n const rowStyle = 'display:flex;align-items:center;gap:10px;margin:10px 0';\r\n const lblStyle = 'width:120px;color:#556;flex:none';\r\n const inputStyle = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit';\r\n const firstCell = table.querySelector('td,th') as HTMLElement | null;\r\n const curWidth = table.style.width || '';\r\n const curPad = firstCell && firstCell.style.padding ? parseFloat(firstCell.style.padding) : '';\r\n const curSp = table.style.borderSpacing ? parseFloat(table.style.borderSpacing) : '';\r\n const curBorder = table.style.borderWidth ? parseFloat(table.style.borderWidth) : '';\r\n const ml = table.style.marginLeft;\r\n const mr = table.style.marginRight;\r\n const curAlign = ml === 'auto' && mr === 'auto' ? 'center' : ml === 'auto' ? 'right' : mr === 'auto' && ml === '0' ? 'left' : '';\r\n\r\n this.dialog(\r\n this.t('tablepropsttl'),\r\n (body) => {\r\n const mk = (labelKey: keyof I18nStrings, el: HTMLElement) => {\r\n const row = document.createElement('div');\r\n row.style.cssText = rowStyle;\r\n const lbl = document.createElement('span');\r\n lbl.style.cssText = lblStyle;\r\n lbl.textContent = this.t(labelKey);\r\n row.append(lbl, el);\r\n body.appendChild(row);\r\n };\r\n wIn = document.createElement('input');\r\n wIn.type = 'text';\r\n wIn.style.cssText = inputStyle;\r\n wIn.placeholder = 'e.g. 600px or 100%';\r\n wIn.value = curWidth as string;\r\n mk('tblwidth', wIn);\r\n padIn = document.createElement('input');\r\n padIn.type = 'number';\r\n padIn.min = '0';\r\n padIn.style.cssText = inputStyle;\r\n padIn.value = String(curPad);\r\n mk('tblcellpadding', padIn);\r\n spIn = document.createElement('input');\r\n spIn.type = 'number';\r\n spIn.min = '0';\r\n spIn.style.cssText = inputStyle;\r\n spIn.value = String(curSp);\r\n mk('tblcellspacing', spIn);\r\n bIn = document.createElement('input');\r\n bIn.type = 'number';\r\n bIn.min = '0';\r\n bIn.style.cssText = inputStyle;\r\n bIn.value = String(curBorder);\r\n mk('tblborder', bIn);\r\n alignSel = document.createElement('select');\r\n alignSel.style.cssText = inputStyle;\r\n (\r\n [\r\n ['', 'alignnone'],\r\n ['left', 'alignleft'],\r\n ['center', 'aligncenter'],\r\n ['right', 'alignright']\r\n ] as [string, keyof I18nStrings][]\r\n ).forEach(([v, k]) => {\r\n const o = document.createElement('option');\r\n o.value = v;\r\n o.textContent = this.t(k);\r\n if (v === curAlign) o.selected = true;\r\n alignSel.appendChild(o);\r\n });\r\n mk('tblalign', alignSel);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.applyTableProps(table, {\r\n width: wIn.value.trim(),\r\n cellpadding: padIn.value.trim(),\r\n cellspacing: spIn.value.trim(),\r\n border: bIn.value.trim(),\r\n align: alignSel.value\r\n });\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n /* ------------------------------------------- cell / row / column props */\r\n private currentCell(): HTMLTableCellElement | null {\r\n let node: Node | null = this.savedRange ? this.savedRange.startContainer : null;\r\n if (!node || !this.ed.contains(node)) {\r\n const s = window.getSelection();\r\n node = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\r\n }\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && /^(TD|TH)$/.test((node as HTMLElement).tagName)) {\r\n return node as HTMLTableCellElement;\r\n }\r\n node = node.parentNode;\r\n }\r\n return null;\r\n }\r\n\r\n private toHexColor(c: string): string {\r\n if (/^#[0-9a-fA-F]{6}$/.test(c)) return c;\r\n const m = /rgba?\\((\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)/.exec(c);\r\n if (!m) return '';\r\n return '#' + [m[1], m[2], m[3]].map((n) => (+n).toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n private formRow(body: HTMLElement, label: string, el: HTMLElement): void {\r\n const row = document.createElement('div');\r\n row.style.cssText = 'display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px';\r\n const lbl = document.createElement('span');\r\n lbl.style.cssText = 'width:120px;color:#556;flex:none';\r\n lbl.textContent = label;\r\n row.append(lbl, el);\r\n body.appendChild(row);\r\n }\r\n\r\n private formInput(value: string, placeholder = ''): HTMLInputElement {\r\n const i = document.createElement('input');\r\n i.type = 'text';\r\n i.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;min-width:0';\r\n i.value = value;\r\n i.placeholder = placeholder;\r\n return i;\r\n }\r\n\r\n private formSelect(options: [string, string][], cur: string): HTMLSelectElement {\r\n const sel = document.createElement('select');\r\n sel.style.cssText = 'flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;background:#fff';\r\n options.forEach(([v, label]) => {\r\n const o = document.createElement('option');\r\n o.value = v;\r\n o.textContent = label;\r\n if (v === cur) o.selected = true;\r\n sel.appendChild(o);\r\n });\r\n return sel;\r\n }\r\n\r\n private formBg(cur: string): { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement } {\r\n const wrap = document.createElement('div');\r\n wrap.style.cssText = 'flex:1;display:flex;align-items:center;gap:8px';\r\n const hex = this.toHexColor(cur);\r\n const color = document.createElement('input');\r\n color.type = 'color';\r\n color.value = hex || '#ffffff';\r\n color.style.cssText = 'width:36px;height:29px;border:1px solid #cfd6df;border-radius:4px;padding:1px;background:none;cursor:pointer';\r\n const lbl = document.createElement('label');\r\n lbl.style.cssText = 'display:flex;align-items:center;gap:6px;cursor:pointer;color:#556';\r\n const fill = document.createElement('input');\r\n fill.type = 'checkbox';\r\n fill.checked = !!hex;\r\n lbl.append(fill, document.createTextNode(this.t('fill')));\r\n color.addEventListener('input', () => (fill.checked = true));\r\n wrap.append(color, lbl);\r\n return { wrap, color, fill };\r\n }\r\n\r\n private setOrClear(el: HTMLElement, prop: string, val: string): void {\r\n if (val) el.style.setProperty(prop, /^(width|height)$/.test(prop) && /^\\d+$/.test(val) ? val + 'px' : val);\r\n else el.style.removeProperty(prop);\r\n }\r\n\r\n private cellPropsDlg(): void {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n let wIn: HTMLInputElement;\r\n let hIn: HTMLInputElement;\r\n let alignSel: HTMLSelectElement;\r\n let vSel: HTMLSelectElement;\r\n let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\r\n this.dialog(\r\n this.t('cellprops').replace('…', ''),\r\n (body) => {\r\n wIn = this.formInput(cell.style.width, 'e.g. 120px / 25%');\r\n this.formRow(body, this.t('tblwidth'), wIn);\r\n hIn = this.formInput(cell.style.height, 'e.g. 40px');\r\n this.formRow(body, this.t('tblheight'), hIn);\r\n alignSel = this.formSelect(\r\n [\r\n ['', this.t('alignnone')],\r\n ['left', this.t('alignleft')],\r\n ['center', this.t('aligncenter')],\r\n ['right', this.t('alignright')]\r\n ],\r\n cell.style.textAlign || ''\r\n );\r\n this.formRow(body, this.t('tblalign'), alignSel);\r\n vSel = this.formSelect(\r\n [\r\n ['', this.t('alignnone')],\r\n ['top', this.t('valigntop')],\r\n ['middle', this.t('valignmiddle')],\r\n ['bottom', this.t('valignbottom')]\r\n ],\r\n cell.style.verticalAlign || ''\r\n );\r\n this.formRow(body, this.t('valign'), vSel);\r\n bg = this.formBg(cell.style.backgroundColor || '');\r\n this.formRow(body, this.t('backcolor'), bg.wrap);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.setOrClear(cell, 'width', wIn.value.trim());\r\n this.setOrClear(cell, 'height', hIn.value.trim());\r\n this.setOrClear(cell, 'text-align', alignSel.value);\r\n this.setOrClear(cell, 'vertical-align', vSel.value);\r\n this.setOrClear(cell, 'background-color', bg.fill.checked ? bg.color.value : '');\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private rowPropsDlg(): void {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n let hIn: HTMLInputElement;\r\n let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\r\n this.dialog(\r\n this.t('rowprops').replace('…', ''),\r\n (body) => {\r\n hIn = this.formInput(row.style.height, 'e.g. 40px');\r\n this.formRow(body, this.t('tblheight'), hIn);\r\n bg = this.formBg(row.style.backgroundColor || '');\r\n this.formRow(body, this.t('backcolor'), bg.wrap);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.setOrClear(row, 'height', hIn.value.trim());\r\n this.setOrClear(row, 'background-color', bg.fill.checked ? bg.color.value : '');\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private colPropsDlg(): void {\r\n const cell = this.currentCell();\r\n if (!cell) {\r\n alert(this.t('nocell'));\r\n return;\r\n }\r\n const row = cell.parentElement as HTMLTableRowElement;\r\n const table = cell.closest('table') as HTMLTableElement;\r\n const idx = Array.from(row.children).indexOf(cell);\r\n const colCells = Array.from(table.rows)\r\n .map((r) => r.cells[idx])\r\n .filter(Boolean) as HTMLTableCellElement[];\r\n let wIn: HTMLInputElement;\r\n let bg: { wrap: HTMLElement; color: HTMLInputElement; fill: HTMLInputElement };\r\n this.dialog(\r\n this.t('colprops').replace('…', ''),\r\n (body) => {\r\n wIn = this.formInput(cell.style.width, 'e.g. 120px / 25%');\r\n this.formRow(body, this.t('tblwidth'), wIn);\r\n bg = this.formBg(cell.style.backgroundColor || '');\r\n this.formRow(body, this.t('backcolor'), bg.wrap);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n colCells.forEach((c) => {\r\n this.setOrClear(c, 'width', wIn.value.trim());\r\n this.setOrClear(c, 'background-color', bg.fill.checked ? bg.color.value : '');\r\n });\r\n this.closeDlg();\r\n this.onChange();\r\n this.positionTableHandles();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n /* ---------------------------------------------------------- dialogs */\r\n private closeDlg(): void {\r\n if (this.dlgOvl) {\r\n this.dlgOvl.remove();\r\n this.dlgOvl = null;\r\n }\r\n }\r\n\r\n private dialog(title: string, bodyBuild: (body: HTMLElement) => void, buttons?: DialogButton[]): void {\r\n this.closeDlg();\r\n this.closePop();\r\n this.dlgOvl = document.createElement('div');\r\n this.dlgOvl.className = 'ovl';\r\n const d = document.createElement('div');\r\n d.className = 'dlg';\r\n d.dir = this.dir();\r\n d.innerHTML = `<header><span>${title}</span><button type=\"button\">×</button></header>\r\n <div class=\"body\"></div><footer></footer>`;\r\n (d.querySelector('header button') as HTMLButtonElement).onclick = () => this.closeDlg();\r\n bodyBuild(d.querySelector('.body') as HTMLElement);\r\n (buttons || [{ label: this.t('close'), primary: true, action: () => this.closeDlg() }]).forEach((b) => {\r\n const btn = document.createElement('button');\r\n btn.type = 'button';\r\n btn.textContent = b.label;\r\n if (b.primary) btn.className = 'pri';\r\n btn.onclick = b.action;\r\n d.querySelector('footer')!.appendChild(btn);\r\n });\r\n this.dlgOvl.appendChild(d);\r\n this.dlgOvl.addEventListener('mousedown', (e) => {\r\n if (e.target === this.dlgOvl) this.closeDlg();\r\n });\r\n document.body.appendChild(this.dlgOvl);\r\n }\r\n\r\n private sourceDlg(): void {\r\n let ta: HTMLTextAreaElement;\r\n this.dialog(\r\n this.t('srcttl'),\r\n (body) => {\r\n ta = document.createElement('textarea');\r\n ta.value = this.ed.innerHTML.replace(/></g, '>\\n<');\r\n body.appendChild(ta);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n this.ed.innerHTML = ta.value;\r\n this.closeDlg();\r\n this.onChange();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private helpDlg(): void {\r\n this.dialog(this.t('helpttl'), (body) => {\r\n const rows = [\r\n ['Ctrl+B', this.t('bold')],\r\n ['Ctrl+I', this.t('italic')],\r\n ['Ctrl+U', this.t('underline')],\r\n ['Ctrl+Z', this.t('undo')],\r\n ['Ctrl+Y', this.t('redo')],\r\n ['Ctrl+A', this.t('selectall')],\r\n ['Alt+0', this.t('helpttl')]\r\n ];\r\n body.innerHTML = `<p style=\"color:#556\">${this.t('shortcuts')}</p>\r\n <table class=\"kbd\">${rows.map((r) => `<tr><td>${r[1]}</td><td><kbd>${r[0]}</kbd></td></tr>`).join('')}</table>`;\r\n });\r\n }\r\n\r\n private wordCountDlg(): void {\r\n this.dialog(this.t('wcttl'), (body) => {\r\n body.innerHTML = `<table class=\"kbd\">\r\n <tr><td>${this.t('wcwords')}</td><td>${this.countWords()}</td></tr>\r\n <tr><td>${this.t('wcchars')}</td><td>${this.ed.textContent?.replace(/\\s/g, '').length ?? 0}</td></tr></table>`;\r\n });\r\n }\r\n\r\n private previewDlg(): void {\r\n this.dialog(this.t('previewttl'), (body) => {\r\n const box = document.createElement('div');\r\n box.style.cssText =\r\n 'width:640px;max-width:78vw;max-height:52vh;overflow:auto;border:1px solid #e3e3e3;border-radius:6px;padding:14px;font-family:Helvetica,Arial,sans-serif;font-size:14px';\r\n box.innerHTML = this.ed.innerHTML;\r\n body.appendChild(box);\r\n });\r\n }\r\n\r\n /** Two-pane picker shared by the special-character map and the emoji map:\r\n * fixed category tabs on the left, the active category's glyphs on the right. */\r\n private glyphPickerDlg(title: string, cats: GlyphCategory[], emoji: boolean): void {\r\n this.saveSel();\r\n this.dialog(title, (body) => {\r\n const wrap = document.createElement('div');\r\n wrap.className = 'chmap';\r\n const tabs = document.createElement('div');\r\n tabs.className = 'chtabs';\r\n const panel = document.createElement('div');\r\n panel.className = 'chpanel';\r\n const grid = document.createElement('div');\r\n grid.className = 'chgrid' + (emoji ? ' emgrid' : '');\r\n panel.appendChild(grid);\r\n const show = (i: number) => {\r\n tabs.querySelectorAll('button').forEach((b, bi) => b.classList.toggle('on', bi === i));\r\n grid.innerHTML = '';\r\n cats[i].chars.forEach((ch) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = ch;\r\n b.onclick = () => {\r\n this.closeDlg();\r\n this.exec('insertText', ch);\r\n };\r\n grid.appendChild(b);\r\n });\r\n panel.scrollTop = 0;\r\n };\r\n cats.forEach((c, i) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = this.t(c.key as keyof I18nStrings);\r\n b.addEventListener('click', () => show(i));\r\n tabs.appendChild(b);\r\n });\r\n wrap.append(tabs, panel);\r\n body.appendChild(wrap);\r\n show(0);\r\n });\r\n }\r\n\r\n private charMap(): void {\r\n this.glyphPickerDlg(this.t('charmap').replace('…', ''), CHAR_CATEGORIES, false);\r\n }\r\n\r\n private emojiMap(): void {\r\n this.glyphPickerDlg(this.t('emoji').replace('…', ''), EMOJI_CATEGORIES, true);\r\n }\r\n\r\n private printDoc(): void {\r\n const w = window.open('', '_blank');\r\n if (!w) return;\r\n w.document.write(\r\n `<html dir=\"${this.dir()}\"><body style=\"font-family:Helvetica,Arial,sans-serif;font-size:14px\">${this.ed.innerHTML}</body></html>`\r\n );\r\n w.document.close();\r\n w.focus();\r\n w.print();\r\n }\r\n\r\n private pickImage(): void {\r\n this.imgInput.value = '';\r\n this.imgInput.click();\r\n }\r\n\r\n /* ---------------------------------------------- image upload placeholder */\r\n private imgPhHTML(id?: string): string {\r\n return `<div class=\"img-ph\"${id ? ` id=\"${id}\"` : ''} contenteditable=\"false\">${IC.image}<span>${this.t('dropimage')}</span></div>`;\r\n }\r\n\r\n private insertImagePlaceholder(): void {\r\n this.restoreSel();\r\n const id = 'img-ph-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\r\n document.execCommand('insertHTML', false, this.imgPhHTML(id));\r\n const ph = this.ed.querySelector('#' + id) as HTMLElement | null;\r\n if (ph) {\r\n ph.removeAttribute('id');\r\n this.selectImgPlaceholder(ph);\r\n }\r\n this.onChange();\r\n }\r\n\r\n private clearImgPlaceholderSel(): void {\r\n this.phCtx?.remove();\r\n this.phCtx = null;\r\n this.phActive?.classList.remove('active');\r\n this.phActive = null;\r\n }\r\n\r\n private removeImgPlaceholder(): void {\r\n const ph = this.phActive;\r\n if (!ph) return;\r\n this.clearImgPlaceholderSel();\r\n /* the placeholder inside a template block IS the media slot — deleting\r\n it drops the slot entirely, leaving a text-only block */\r\n (ph.closest('.tpl-media') || ph).remove();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private selectImgPlaceholder(ph: HTMLElement): void {\r\n if (this.phActive === ph) return;\r\n this.clearImgPlaceholderSel();\r\n this.phActive = ph;\r\n ph.classList.add('active');\r\n this.phCtx = document.createElement('div');\r\n this.phCtx.className = 'imgctx img-ph-ctx';\r\n this.phCtx.dir = this.dir();\r\n document.body.appendChild(this.phCtx);\r\n this.renderPhCtxButtons();\r\n }\r\n\r\n private renderPhCtxButtons(): void {\r\n const el = this.phCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n el.append(\r\n this.ctxBtn(IC.uploadic, this.t('uploadimg'), () => {\r\n this.phUploadTarget = this.phActive;\r\n this.pickImage();\r\n }),\r\n this.ctxBtn(IC.link, this.t('imagelink'), () => this.renderPhCtxUrlInput())\r\n );\r\n /* a template's media slot is image-first, but can host a video instead */\r\n if (this.phActive?.closest('.tpl-media')) {\r\n el.append(this.ctxBtn(IC.video, this.t('quickvideo'), () => this.swapPlaceholderKind('video')));\r\n }\r\n el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deleteimg'), () => this.removeImgPlaceholder()));\r\n this.positionImgPhCtx();\r\n }\r\n\r\n /** Swaps a template slot's placeholder between image and video kinds, so the\r\n * same media slot can be filled with either. */\r\n private swapPlaceholderKind(to: 'image' | 'video'): void {\r\n const ph = to === 'video' ? this.phActive : this.vphActive;\r\n if (!ph) return;\r\n const tmp = document.createElement('div');\r\n tmp.innerHTML = to === 'video' ? this.vidPhHTML() : this.imgPhHTML();\r\n const next = tmp.firstElementChild as HTMLElement;\r\n if (to === 'video') this.clearImgPlaceholderSel();\r\n else this.clearVphPlaceholderSel();\r\n ph.replaceWith(next);\r\n if (to === 'video') this.selectVphPlaceholder(next);\r\n else this.selectImgPlaceholder(next);\r\n this.onChange();\r\n }\r\n\r\n private renderPhCtxUrlInput(): void {\r\n const el = this.phCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n const inp = document.createElement('input');\r\n inp.type = 'url';\r\n inp.className = 'urlinp';\r\n inp.placeholder = this.t('imageurlph');\r\n const ok = document.createElement('button');\r\n ok.type = 'button';\r\n ok.className = 'txtbtn';\r\n ok.textContent = this.t('insertimg');\r\n const submit = () => {\r\n const url = inp.value.trim();\r\n const ph = this.phActive;\r\n if (!ph) return;\r\n if (!/^(https?:|data:image\\/|blob:)/i.test(url)) {\r\n inp.classList.add('err');\r\n inp.focus();\r\n return;\r\n }\r\n ok.disabled = true;\r\n inp.disabled = true;\r\n /* only place the image once the URL actually loads, so the user\r\n gets a working preview instead of a broken-image icon */\r\n const probe = new Image();\r\n probe.onload = () => this.replacePlaceholderWithImage(ph, url, '');\r\n probe.onerror = () => {\r\n ok.disabled = false;\r\n inp.disabled = false;\r\n inp.classList.add('err');\r\n inp.focus();\r\n };\r\n probe.src = url;\r\n };\r\n ok.addEventListener('click', submit);\r\n inp.addEventListener('input', () => inp.classList.remove('err'));\r\n inp.addEventListener('keydown', (e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n submit();\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n this.renderPhCtxButtons();\r\n }\r\n });\r\n el.append(inp, ok);\r\n this.positionImgPhCtx();\r\n inp.focus();\r\n }\r\n\r\n private readImageFileInto(file: File, ph: HTMLElement): void {\r\n if (ph.classList.contains('uploading')) return;\r\n if (this.imageUploadHandler) {\r\n this.uploadImageFile(file, ph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n if (this.ed.contains(ph)) this.replacePlaceholderWithImage(ph, fr.result as string, file.name.replace(/\"/g, ''));\r\n };\r\n fr.readAsDataURL(file);\r\n }\r\n\r\n /** Runs the host-supplied imageUploadHandler instead of inlining base64,\r\n * so apps can route the file to S3 / Azure Blob / their own server. */\r\n private uploadImageFile(file: File, ph: HTMLElement): void {\r\n const title = file.name.replace(/\"/g, '');\r\n ph.classList.remove('upload-error');\r\n ph.classList.add('uploading');\r\n const span = ph.querySelector('span');\r\n if (span) span.textContent = this.t('uploading');\r\n this.imageUploadHandler!(file)\r\n .then((url) => {\r\n if (!this.ed.contains(ph)) return;\r\n this.replacePlaceholderWithImage(ph, url, title);\r\n })\r\n .catch((err) => {\r\n if (!this.ed.contains(ph)) return;\r\n ph.classList.remove('uploading');\r\n ph.classList.add('upload-error');\r\n if (span) span.textContent = this.t('uploadfailed');\r\n this.onImageUploadError?.(err, file);\r\n });\r\n }\r\n\r\n private replacePlaceholderWithImage(ph: HTMLElement, src: string, title: string): void {\r\n const img = document.createElement('img');\r\n img.src = src;\r\n img.alt = '';\r\n if (title) img.title = title;\r\n ph.replaceWith(img);\r\n if (this.phActive === ph) this.clearImgPlaceholderSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private positionImgPhCtx(): void {\r\n if (this.phActive && !document.body.contains(this.phActive)) {\r\n this.clearImgPlaceholderSel();\r\n return;\r\n }\r\n if (!this.phActive || !this.phCtx) return;\r\n const r = this.phActive.getBoundingClientRect();\r\n const cw = this.phCtx.offsetWidth;\r\n const ch = this.phCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.bottom + scrollY + 8;\r\n if (r.bottom + 8 + ch > innerHeight - 4) cy = Math.max(this.ctxMinTop(), r.top + scrollY - ch - 8);\r\n this.phCtx.style.left = cx + 'px';\r\n this.phCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- video upload placeholder */\r\n private pickVideo(): void {\r\n this.vidInput.value = '';\r\n this.vidInput.click();\r\n }\r\n\r\n private vidPhHTML(id?: string): string {\r\n return `<div class=\"img-ph vid-ph\"${id ? ` id=\"${id}\"` : ''} contenteditable=\"false\">${IC.video}<span>${this.t('dropvideo')}</span></div>`;\r\n }\r\n\r\n private insertVideoPlaceholder(): void {\r\n this.restoreSel();\r\n const id = 'vid-ph-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\r\n document.execCommand('insertHTML', false, this.vidPhHTML(id));\r\n const ph = this.ed.querySelector('#' + id) as HTMLElement | null;\r\n if (ph) {\r\n ph.removeAttribute('id');\r\n this.selectVphPlaceholder(ph);\r\n }\r\n this.onChange();\r\n }\r\n\r\n private clearVphPlaceholderSel(): void {\r\n this.vphCtx?.remove();\r\n this.vphCtx = null;\r\n this.vphActive?.classList.remove('active');\r\n this.vphActive = null;\r\n }\r\n\r\n private removeVphPlaceholder(): void {\r\n const ph = this.vphActive;\r\n if (!ph) return;\r\n this.clearVphPlaceholderSel();\r\n /* like the image variant: a placeholder inside a template block IS the\r\n media slot — deleting it drops the slot, leaving a text-only block */\r\n (ph.closest('.tpl-media') || ph).remove();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private selectVphPlaceholder(ph: HTMLElement): void {\r\n if (this.vphActive === ph) return;\r\n this.clearVphPlaceholderSel();\r\n this.vphActive = ph;\r\n ph.classList.add('active');\r\n this.vphCtx = document.createElement('div');\r\n this.vphCtx.className = 'imgctx img-ph-ctx';\r\n this.vphCtx.dir = this.dir();\r\n document.body.appendChild(this.vphCtx);\r\n this.renderVphCtxButtons();\r\n }\r\n\r\n private renderVphCtxButtons(): void {\r\n const el = this.vphCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n el.append(\r\n this.ctxBtn(IC.uploadic, this.t('uploadvideo'), () => {\r\n this.vphUploadTarget = this.vphActive;\r\n this.pickVideo();\r\n }),\r\n this.ctxBtn(IC.link, this.t('videolink'), () => this.renderVphCtxUrlInput())\r\n );\r\n /* inside a template slot, offer switching the slot back to an image */\r\n if (this.vphActive?.closest('.tpl-media')) {\r\n el.append(this.ctxBtn(IC.image, this.t('quickimage'), () => this.swapPlaceholderKind('image')));\r\n }\r\n el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deletevideo'), () => this.removeVphPlaceholder()));\r\n this.positionVphCtx();\r\n }\r\n\r\n private renderVphCtxUrlInput(): void {\r\n const el = this.vphCtx;\r\n if (!el) return;\r\n el.innerHTML = '';\r\n const inp = document.createElement('input');\r\n inp.type = 'url';\r\n inp.className = 'urlinp';\r\n inp.placeholder = this.t('videourlph');\r\n const ok = document.createElement('button');\r\n ok.type = 'button';\r\n ok.className = 'txtbtn';\r\n ok.textContent = this.t('insertvideo');\r\n const submit = () => {\r\n const url = inp.value.trim();\r\n const ph = this.vphActive;\r\n if (!ph) return;\r\n if (!/^(https?:|data:video\\/|blob:)/i.test(url)) {\r\n inp.classList.add('err');\r\n inp.focus();\r\n return;\r\n }\r\n /* a page URL from a known video host can't play in a <video> tag —\r\n swap in the host's iframe player instead of probing it */\r\n const embed = this.videoEmbedUrl(url);\r\n if (embed) {\r\n this.replacePlaceholderWithEmbed(ph, embed);\r\n return;\r\n }\r\n ok.disabled = true;\r\n inp.disabled = true;\r\n /* only place the video once its metadata actually loads, so the user\r\n gets a working preview instead of a broken player */\r\n const probe = document.createElement('video');\r\n probe.preload = 'metadata';\r\n probe.onloadedmetadata = () => this.replacePlaceholderWithVideo(ph, url, '');\r\n probe.onerror = () => {\r\n ok.disabled = false;\r\n inp.disabled = false;\r\n inp.classList.add('err');\r\n inp.focus();\r\n };\r\n probe.src = url;\r\n };\r\n ok.addEventListener('click', submit);\r\n inp.addEventListener('input', () => inp.classList.remove('err'));\r\n inp.addEventListener('keydown', (e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n submit();\r\n } else if (e.key === 'Escape') {\r\n e.stopPropagation();\r\n this.renderVphCtxButtons();\r\n }\r\n });\r\n el.append(inp, ok);\r\n this.positionVphCtx();\r\n inp.focus();\r\n }\r\n\r\n private readVideoFileInto(file: File, ph: HTMLElement): void {\r\n if (ph.classList.contains('uploading')) return;\r\n if (this.videoUploadHandler) {\r\n this.uploadVideoFile(file, ph);\r\n return;\r\n }\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n if (this.ed.contains(ph)) this.replacePlaceholderWithVideo(ph, fr.result as string, file.name.replace(/\"/g, ''));\r\n };\r\n fr.readAsDataURL(file);\r\n }\r\n\r\n /** Runs the host-supplied videoUploadHandler instead of inlining base64,\r\n * so apps can route the file to S3 / Azure Blob / their own server. */\r\n private uploadVideoFile(file: File, ph: HTMLElement): void {\r\n const title = file.name.replace(/\"/g, '');\r\n ph.classList.remove('upload-error');\r\n ph.classList.add('uploading');\r\n const span = ph.querySelector('span');\r\n if (span) span.textContent = this.t('uploading');\r\n this.videoUploadHandler!(file)\r\n .then((url) => {\r\n if (!this.ed.contains(ph)) return;\r\n this.replacePlaceholderWithVideo(ph, url, title);\r\n })\r\n .catch((err) => {\r\n if (!this.ed.contains(ph)) return;\r\n ph.classList.remove('uploading');\r\n ph.classList.add('upload-error');\r\n if (span) span.textContent = this.t('uploadfailed');\r\n this.onVideoUploadError?.(err, file);\r\n });\r\n }\r\n\r\n private replacePlaceholderWithVideo(ph: HTMLElement, src: string, title: string): void {\r\n const vid = document.createElement('video');\r\n vid.controls = true;\r\n vid.src = src;\r\n if (title) vid.title = title;\r\n ph.replaceWith(vid);\r\n if (this.vphActive === ph) this.clearVphPlaceholderSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n /** Swaps a video placeholder for a hosted player iframe (YouTube & co.). */\r\n private replacePlaceholderWithEmbed(ph: HTMLElement, embedUrl: string): void {\r\n const tmp = document.createElement('div');\r\n tmp.innerHTML = this.videoEmbedHTML(embedUrl);\r\n ph.replaceWith(tmp.firstElementChild as HTMLElement);\r\n if (this.vphActive === ph) this.clearVphPlaceholderSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private positionVphCtx(): void {\r\n if (this.vphActive && !document.body.contains(this.vphActive)) {\r\n this.clearVphPlaceholderSel();\r\n return;\r\n }\r\n if (!this.vphActive || !this.vphCtx) return;\r\n const r = this.vphActive.getBoundingClientRect();\r\n const cw = this.vphCtx.offsetWidth;\r\n const ch = this.vphCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.bottom + scrollY + 8;\r\n if (r.bottom + 8 + ch > innerHeight - 4) cy = Math.max(this.ctxMinTop(), r.top + scrollY - ch - 8);\r\n this.vphCtx.style.left = cx + 'px';\r\n this.vphCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- video toolbar (post-insert) */\r\n private cancelVidHide(): void {\r\n if (this.vidHideTimer != null) {\r\n window.clearTimeout(this.vidHideTimer);\r\n this.vidHideTimer = null;\r\n }\r\n }\r\n\r\n private clearVidHandles(): void {\r\n this.cancelVidHide();\r\n this.vidCtx?.remove();\r\n this.vidCtx = null;\r\n this.vidActive?.classList.remove('vid-selected');\r\n this.vidActive = null;\r\n }\r\n\r\n private selectVideo(vid: HTMLElement): void {\r\n if (this.vidActive === vid) return;\r\n this.clearVidHandles();\r\n this.vidActive = vid;\r\n vid.classList.add('vid-selected');\r\n this.vidCtx = this.buildVideoCtxToolbar(vid);\r\n this.positionVidCtx();\r\n }\r\n\r\n private buildVideoCtxToolbar(vid: HTMLElement): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'imgctx';\r\n el.dir = this.dir();\r\n const rebuild = () => {\r\n const rebuilt = this.buildVideoCtxToolbar(vid);\r\n this.vidCtx?.replaceWith(rebuilt);\r\n this.vidCtx = rebuilt;\r\n this.positionVidCtx();\r\n };\r\n const align = (a: 'left' | 'center' | 'right') => {\r\n this.setVideoAlign(vid, a);\r\n rebuild();\r\n };\r\n const isLeft = vid.style.float === 'left';\r\n const isRight = vid.style.float === 'right';\r\n const isCenter = !isLeft && !isRight && vid.style.marginLeft === 'auto' && vid.style.marginRight === 'auto';\r\n const mkBtn = (icon: string, tip: string, on: boolean, fn: () => void) => {\r\n const b = this.ctxBtn(icon, tip, fn);\r\n b.classList.toggle('on', on);\r\n return b;\r\n };\r\n el.append(\r\n mkBtn(IC.alignleft, this.t('alignleft'), isLeft, () => align('left')),\r\n mkBtn(IC.aligncenter, this.t('aligncenter'), isCenter, () => align('center')),\r\n mkBtn(IC.alignright, this.t('alignright'), isRight, () => align('right')),\r\n this.ctxSep(),\r\n mkBtn(IC.trash, this.t('deletevideo'), false, () => {\r\n vid.remove();\r\n this.clearVidHandles();\r\n this.onChange();\r\n })\r\n );\r\n el.addEventListener('mousedown', (e) => e.preventDefault());\r\n el.addEventListener('mouseenter', () => this.cancelVidHide());\r\n el.addEventListener('mouseleave', () => {\r\n this.cancelVidHide();\r\n this.vidHideTimer = window.setTimeout(() => this.clearVidHandles(), 250);\r\n });\r\n document.body.appendChild(el);\r\n return el;\r\n }\r\n\r\n private setVideoAlign(vid: HTMLElement, align: 'left' | 'center' | 'right'): void {\r\n vid.style.float = '';\r\n vid.style.display = '';\r\n vid.style.marginLeft = '';\r\n vid.style.marginRight = '';\r\n vid.style.marginBottom = '';\r\n if (align === 'left') {\r\n vid.style.float = 'left';\r\n vid.style.marginInlineEnd = '1em';\r\n vid.style.marginBottom = '0.5em';\r\n } else if (align === 'right') {\r\n vid.style.float = 'right';\r\n vid.style.marginInlineStart = '1em';\r\n vid.style.marginBottom = '0.5em';\r\n } else {\r\n vid.style.display = 'block';\r\n vid.style.marginLeft = 'auto';\r\n vid.style.marginRight = 'auto';\r\n }\r\n this.onChange();\r\n }\r\n\r\n private positionVidCtx(): void {\r\n if (!this.vidActive || !document.body.contains(this.vidActive)) {\r\n this.clearVidHandles();\r\n return;\r\n }\r\n const r = this.vidActive.getBoundingClientRect();\r\n if (!this.vidCtx) return;\r\n const cw = this.vidCtx.offsetWidth;\r\n const ch = this.vidCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.top + scrollY - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\r\n this.vidCtx.style.left = cx + 'px';\r\n this.vidCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- video dialog / embeds */\r\n /** Maps a page URL from a known video host to its iframe player URL. Returns\r\n * null for anything else (e.g. direct .mp4 file URLs). */\r\n private videoEmbedUrl(url: string): string | null {\r\n let m = url.match(/^https?:\\/\\/(?:www\\.|m\\.)?youtube\\.com\\/watch\\?(?:[^\\s#]*[?&])?v=([\\w-]{5,})/i);\r\n if (!m) m = url.match(/^https?:\\/\\/(?:www\\.)?(?:youtu\\.be|youtube\\.com\\/(?:embed|shorts|live))\\/([\\w-]{5,})/i);\r\n if (m) return 'https://www.youtube.com/embed/' + m[1];\r\n m = url.match(/^https?:\\/\\/(?:www\\.)?vimeo\\.com\\/(\\d+)/i);\r\n if (m) return 'https://player.vimeo.com/video/' + m[1];\r\n m = url.match(/^https?:\\/\\/(?:www\\.)?dailymotion\\.com\\/video\\/(\\w+)/i);\r\n if (m) return 'https://www.dailymotion.com/embed/video/' + m[1];\r\n return null;\r\n }\r\n\r\n private videoEmbedHTML(src: string, w = 560, h = 314): string {\r\n return `<span class=\"video-embed\" contenteditable=\"false\"><iframe src=\"${src}\" width=\"${w}\" height=\"${h}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></span>`;\r\n }\r\n\r\n /** Insert/edit-video dialog with General (source/width/height), Embed (embed\r\n * code) and Advanced (alternative source, poster image) tabs. Hosted page\r\n * URLs (YouTube & co.) become iframe players; anything else becomes a\r\n * <video> tag. The General tab also offers the same upload path as before\r\n * (videoUploadHandler when configured, else inline base64). */\r\n private videoDlg(): void {\r\n this.saveSel();\r\n let srcInp: HTMLInputElement;\r\n let wInp: HTMLInputElement;\r\n let hInp: HTMLInputElement;\r\n let embedTa: HTMLTextAreaElement;\r\n let altInp: HTMLInputElement;\r\n let posterInp: HTMLInputElement;\r\n const field = (labelKey: keyof I18nStrings, input: HTMLElement): HTMLElement => {\r\n const f = document.createElement('div');\r\n f.className = 'dfield';\r\n const l = document.createElement('label');\r\n l.textContent = this.t(labelKey);\r\n f.append(l, input);\r\n return f;\r\n };\r\n const urlInput = (): HTMLInputElement => {\r\n const i = document.createElement('input');\r\n i.type = 'url';\r\n return i;\r\n };\r\n this.dialog(\r\n this.t('videodlgttl'),\r\n (body) => {\r\n const tabs = document.createElement('div');\r\n tabs.className = 'dtabs';\r\n const panels: HTMLElement[] = [];\r\n const mkTab = (labelKey: keyof I18nStrings, build: (p: HTMLElement) => void) => {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.textContent = this.t(labelKey);\r\n const p = document.createElement('div');\r\n p.className = 'dtabpanel';\r\n build(p);\r\n const i = panels.length;\r\n panels.push(p);\r\n b.addEventListener('click', () => show(i));\r\n tabs.appendChild(b);\r\n };\r\n const show = (i: number) => {\r\n tabs.querySelectorAll('button').forEach((x, xi) => x.classList.toggle('on', xi === i));\r\n panels.forEach((x, xi) => (x.style.display = xi === i ? '' : 'none'));\r\n };\r\n mkTab('vidgeneral', (p) => {\r\n srcInp = urlInput();\r\n srcInp.placeholder = this.t('videourlph');\r\n const srcRow = document.createElement('div');\r\n srcRow.className = 'drow';\r\n const upBtn = document.createElement('button');\r\n upBtn.type = 'button';\r\n upBtn.className = 'txtbtn';\r\n upBtn.textContent = this.t('uploadvideo');\r\n const file = document.createElement('input');\r\n file.type = 'file';\r\n file.accept = this.options.videoFileTypes.join(',');\r\n file.style.display = 'none';\r\n upBtn.addEventListener('click', () => {\r\n file.value = '';\r\n file.click();\r\n });\r\n file.addEventListener('change', () => {\r\n const f = file.files?.[0];\r\n if (!f) return;\r\n upBtn.disabled = true;\r\n upBtn.textContent = this.t('uploading');\r\n const done = (url: string) => {\r\n srcInp.value = url;\r\n upBtn.disabled = false;\r\n upBtn.textContent = this.t('uploadvideo');\r\n };\r\n if (this.videoUploadHandler) {\r\n this.videoUploadHandler(f)\r\n .then(done)\r\n .catch((err) => {\r\n upBtn.disabled = false;\r\n upBtn.textContent = this.t('uploadfailed');\r\n this.onVideoUploadError?.(err, f);\r\n });\r\n } else {\r\n const fr = new FileReader();\r\n fr.onload = () => done(fr.result as string);\r\n fr.readAsDataURL(f);\r\n }\r\n });\r\n srcRow.append(srcInp, upBtn, file);\r\n srcInp.style.flex = '1';\r\n p.appendChild(field('vidsource', srcRow));\r\n const dims = document.createElement('div');\r\n dims.className = 'drow';\r\n wInp = document.createElement('input');\r\n wInp.type = 'number';\r\n wInp.value = '560';\r\n hInp = document.createElement('input');\r\n hInp.type = 'number';\r\n hInp.value = '314';\r\n dims.append(field('tblwidth', wInp), field('tblheight', hInp));\r\n p.appendChild(dims);\r\n });\r\n mkTab('vidembed', (p) => {\r\n const hint = document.createElement('p');\r\n hint.textContent = this.t('vidembedhint');\r\n hint.style.cssText = 'margin:0 0 8px;color:#556;font-size:13.5px';\r\n embedTa = document.createElement('textarea');\r\n embedTa.style.cssText = 'width:100%;box-sizing:border-box;height:160px';\r\n p.append(hint, embedTa);\r\n });\r\n mkTab('vidadvanced', (p) => {\r\n altInp = urlInput();\r\n posterInp = urlInput();\r\n p.append(field('vidaltsource', altInp), field('vidposter', posterInp));\r\n });\r\n const wrap = document.createElement('div');\r\n wrap.className = 'dtabbody';\r\n panels.forEach((p) => wrap.appendChild(p));\r\n body.append(tabs, wrap);\r\n show(0);\r\n setTimeout(() => srcInp.focus(), 0);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n const embedCode = embedTa.value.trim();\r\n const src = srcInp.value.trim();\r\n const w = parseInt(wInp.value, 10) || 560;\r\n const h = parseInt(hInp.value, 10) || 314;\r\n this.closeDlg();\r\n if (!embedCode && !src) return;\r\n this.restoreSel();\r\n if (embedCode) {\r\n document.execCommand('insertHTML', false, `<span class=\"video-embed\" contenteditable=\"false\">${embedCode}</span>`);\r\n this.onChange();\r\n return;\r\n }\r\n const embed = this.videoEmbedUrl(src);\r\n if (embed) {\r\n document.execCommand('insertHTML', false, this.videoEmbedHTML(embed, w, h));\r\n } else {\r\n const alt = altInp.value.trim();\r\n const poster = posterInp.value.trim();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<video controls width=\"${w}\" height=\"${h}\"${poster ? ` poster=\"${this.escapeAttr(poster)}\"` : ''}>` +\r\n `<source src=\"${this.escapeAttr(src)}\">${alt ? `<source src=\"${this.escapeAttr(alt)}\">` : ''}</video>`\r\n );\r\n }\r\n this.onChange();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private escapeAttr(s: string): string {\r\n return s.replace(/&/g, '&').replace(/\"/g, '"');\r\n }\r\n\r\n private escHtml(s: string): string {\r\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\r\n }\r\n\r\n /* ---------------------------------------------------------- inline code & code samples */\r\n /** The inline <code> run the caret sits in, if any (code blocks don't count). */\r\n private closestInlineCode(): HTMLElement | null {\r\n const s = window.getSelection();\r\n const node = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\r\n if (!node) return null;\r\n const el = node.nodeType === Node.ELEMENT_NODE ? (node as HTMLElement) : node.parentElement;\r\n const code = el?.closest('code') as HTMLElement | null;\r\n return code && this.ed.contains(code) && !code.closest('pre') ? code : null;\r\n }\r\n\r\n /** Wraps the selection in an inline <code> run, or unwraps the run the caret is\r\n * in. Selections spanning multiple blocks are left alone (a <code> can't wrap\r\n * across paragraphs without producing invalid markup). */\r\n private toggleInlineCode(): void {\r\n this.restoreSel();\r\n const sel = window.getSelection();\r\n if (!sel || !sel.rangeCount) return;\r\n const existing = this.closestInlineCode();\r\n if (existing) {\r\n const first = existing.firstChild;\r\n const last = existing.lastChild;\r\n while (existing.firstChild) existing.parentNode!.insertBefore(existing.firstChild, existing);\r\n existing.remove();\r\n if (first && last) {\r\n const r = document.createRange();\r\n r.setStartBefore(first);\r\n r.setEndAfter(last);\r\n sel.removeAllRanges();\r\n sel.addRange(r);\r\n }\r\n } else {\r\n const range = sel.getRangeAt(0);\r\n if (range.collapsed) return;\r\n if (this.closestBlock(range.startContainer) !== this.closestBlock(range.endContainer)) return;\r\n const code = document.createElement('code');\r\n code.appendChild(range.extractContents());\r\n range.insertNode(code);\r\n const r = document.createRange();\r\n r.selectNodeContents(code);\r\n sel.removeAllRanges();\r\n sel.addRange(r);\r\n }\r\n this.saveSel();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n /** Typing `snippet` converts to an inline <code> run the moment the closing\r\n * backtick is typed, so code can be marked up without reaching for the toolbar. */\r\n private tryCodeTyping(e: KeyboardEvent): void {\r\n const sel = window.getSelection();\r\n if (!sel || !sel.isCollapsed || !sel.anchorNode) return;\r\n const node = sel.anchorNode;\r\n if (node.nodeType !== Node.TEXT_NODE || !this.ed.contains(node)) return;\r\n if (node.parentElement?.closest('code, pre')) return;\r\n const before = (node.textContent || '').slice(0, sel.anchorOffset);\r\n const m = before.match(/(?:^|[^`])`([^`]+)$/);\r\n if (!m) return;\r\n const src = m[1];\r\n if (/^\\s|\\s$/.test(src)) return;\r\n e.preventDefault();\r\n const range = document.createRange();\r\n range.setStart(node, sel.anchorOffset - src.length - 1);\r\n range.setEnd(node, sel.anchorOffset);\r\n /* direct DOM instead of execCommand('insertHTML') — with styleWithCSS\r\n active the browser rewrites a pasted <code> into a styled <span>,\r\n losing the semantic tag */\r\n range.deleteContents();\r\n const code = document.createElement('code');\r\n code.textContent = src;\r\n range.insertNode(code);\r\n const after = document.createRange();\r\n after.setStartAfter(code);\r\n after.collapse(true);\r\n sel.removeAllRanges();\r\n sel.addRange(after);\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n /** Custom dropdown for dialog fields (a native <select> popup can't be styled):\r\n * a field-styled button showing the current choice that opens a floating,\r\n * scrollable option list. Read the current choice via `.value()`. */\r\n private dlgSelect(options: [string, string][], selected: string): { el: HTMLElement; value: () => string } {\r\n let value = selected;\r\n const el = document.createElement('div');\r\n el.className = 'dsel';\r\n const btn = document.createElement('button');\r\n btn.type = 'button';\r\n btn.className = 'dsel-btn';\r\n const lbl = document.createElement('span');\r\n lbl.className = 'lbl';\r\n lbl.textContent = options.find(([v]) => v === selected)?.[1] || '';\r\n btn.append(lbl);\r\n btn.insertAdjacentHTML('beforeend', IC.chev);\r\n const list = document.createElement('div');\r\n list.className = 'dsel-list';\r\n options.forEach(([v, label]) => {\r\n const o = document.createElement('button');\r\n o.type = 'button';\r\n o.textContent = label;\r\n o.classList.toggle('on', v === value);\r\n o.addEventListener('click', () => {\r\n value = v;\r\n lbl.textContent = label;\r\n list.querySelectorAll('button').forEach((b) => b.classList.toggle('on', b === o));\r\n el.classList.remove('open');\r\n btn.focus();\r\n });\r\n list.appendChild(o);\r\n });\r\n btn.addEventListener('click', () => {\r\n el.classList.toggle('open');\r\n if (el.classList.contains('open')) (list.querySelector('.on') as HTMLElement | null)?.scrollIntoView({ block: 'nearest' });\r\n });\r\n el.addEventListener('focusout', (e) => {\r\n if (!el.contains((e as FocusEvent).relatedTarget as Node)) el.classList.remove('open');\r\n });\r\n el.addEventListener('keydown', (e) => {\r\n /* Escape closes the open list without closing the whole dialog */\r\n if ((e as KeyboardEvent).key === 'Escape' && el.classList.contains('open')) {\r\n e.stopPropagation();\r\n el.classList.remove('open');\r\n btn.focus();\r\n }\r\n });\r\n el.append(btn, list);\r\n return { el, value: () => value };\r\n }\r\n\r\n /** Insert/edit-code-sample dialog: language dropdown + monospace textarea to\r\n * paste or type code into. Inserts a non-editable <pre class=\"code-block\">\r\n * whose header shows the language; click the block to edit / copy / delete. */\r\n private codeDlg(existing?: HTMLElement): void {\r\n this.saveSel();\r\n let langDd: { el: HTMLElement; value: () => string };\r\n let ta: HTMLTextAreaElement;\r\n this.dialog(\r\n this.t('codedlgttl'),\r\n (body) => {\r\n const f = document.createElement('div');\r\n f.className = 'dfield';\r\n const l = document.createElement('label');\r\n l.textContent = this.t('codelang');\r\n langDd = this.dlgSelect(CODE_LANGS, existing?.dataset.lang || 'plain');\r\n f.append(l, langDd.el);\r\n ta = document.createElement('textarea');\r\n ta.className = 'code-input';\r\n ta.spellcheck = false;\r\n ta.value = existing?.querySelector('code')?.textContent || '';\r\n ta.placeholder = 'const answer = 42;';\r\n body.append(f, ta);\r\n setTimeout(() => ta.focus(), 0);\r\n },\r\n [\r\n { label: this.t('cancel'), action: () => this.closeDlg() },\r\n {\r\n label: this.t('save'),\r\n primary: true,\r\n action: () => {\r\n const src = ta.value.replace(/\\s+$/, '');\r\n const lang = langDd.value();\r\n const label = CODE_LANGS.find(([v]) => v === lang)?.[1] || lang;\r\n this.closeDlg();\r\n if (!src.trim()) return;\r\n if (existing) {\r\n existing.dataset.lang = lang;\r\n existing.setAttribute('data-lang-label', label);\r\n const codeEl = existing.querySelector('code') || existing;\r\n codeEl.textContent = src;\r\n this.clearCodeSel();\r\n this.onChange();\r\n return;\r\n }\r\n this.restoreSel();\r\n document.execCommand(\r\n 'insertHTML',\r\n false,\r\n `<pre class=\"code-block\" contenteditable=\"false\" data-lang=\"${lang}\" data-lang-label=\"${this.escapeAttr(label)}\">` +\r\n `<code>${this.escHtml(src)}</code></pre><p><br></p>`\r\n );\r\n this.onChange();\r\n }\r\n }\r\n ]\r\n );\r\n }\r\n\r\n private clearCodeSel(): void {\r\n this.codeCtx?.remove();\r\n this.codeCtx = null;\r\n this.codeActive?.classList.remove('code-selected');\r\n this.codeActive = null;\r\n }\r\n\r\n private selectCodeEl(el: HTMLElement): void {\r\n if (this.codeActive === el) return;\r\n this.clearCodeSel();\r\n this.codeActive = el;\r\n el.classList.add('code-selected');\r\n this.codeCtx = this.buildCodeCtxToolbar(el);\r\n this.positionCodeCtx();\r\n }\r\n\r\n private buildCodeCtxToolbar(el: HTMLElement): HTMLElement {\r\n const ctx = document.createElement('div');\r\n ctx.className = 'imgctx';\r\n ctx.dir = this.dir();\r\n ctx.append(\r\n this.ctxBtn(IC.editic, this.t('editcode'), () => this.codeDlg(el)),\r\n this.ctxBtn(IC.copyic, this.t('copycode'), () => this.copyCodeBlock(el)),\r\n this.ctxSep(),\r\n this.ctxBtn(IC.trash, this.t('deletecode'), () => {\r\n el.remove();\r\n this.clearCodeSel();\r\n this.onChange();\r\n })\r\n );\r\n ctx.addEventListener('mousedown', (e) => e.preventDefault());\r\n document.body.appendChild(ctx);\r\n return ctx;\r\n }\r\n\r\n private copyCodeBlock(el: HTMLElement): void {\r\n const text = el.querySelector('code')?.textContent ?? el.textContent ?? '';\r\n if (navigator.clipboard?.writeText) {\r\n navigator.clipboard.writeText(text).catch(() => {});\r\n return;\r\n }\r\n const ta = document.createElement('textarea');\r\n ta.value = text;\r\n document.body.appendChild(ta);\r\n ta.select();\r\n document.execCommand('copy');\r\n ta.remove();\r\n }\r\n\r\n private positionCodeCtx(): void {\r\n if (!this.codeActive || !document.body.contains(this.codeActive)) {\r\n this.clearCodeSel();\r\n return;\r\n }\r\n const r = this.codeActive.getBoundingClientRect();\r\n if (!this.codeCtx) return;\r\n const cw = this.codeCtx.offsetWidth;\r\n const ch = this.codeCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.top + scrollY - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\r\n this.codeCtx.style.left = cx + 'px';\r\n this.codeCtx.style.top = cy + 'px';\r\n }\r\n\r\n /* ---------------------------------------------------------- templates */\r\n private templateMenu(anchor: HTMLElement): void {\r\n this.popup(anchor, (el) => this.buildTemplatePickInto(el));\r\n }\r\n\r\n /** Miniature div-based mockup of a layout, mirroring what the block looks\r\n like in the editor: grey box = image slot, bars = heading/paragraph. */\r\n private tplPreviewHTML(layout: TplLayout): string {\r\n const img = '<span class=\"pv-img\"></span>';\r\n const head = '<span class=\"pv-h\"></span>';\r\n const line = (w: number) => `<span class=\"pv-l\" style=\"width:${w}%\"></span>`;\r\n const col = (inner: string) => `<span class=\"pv-col\">${inner}</span>`;\r\n const row = (inner: string) => `<span class=\"pv-row\">${inner}</span>`;\r\n const textCol = col(head + line(100) + line(88));\r\n if (layout === 'img-left')\r\n return `<span class=\"pv\">${row(img + textCol)}${line(100)}${line(72)}</span>`;\r\n if (layout === 'img-right')\r\n return `<span class=\"pv\">${row(textCol + img)}${line(100)}${line(72)}</span>`;\r\n if (layout === 'img-top')\r\n return `<span class=\"pv pv-c\">${img}${head}${line(100)}${line(72)}</span>`;\r\n return `<span class=\"pv pv-c\">${head}${line(100)}${line(72)}${img}</span>`;\r\n }\r\n\r\n private buildTemplatePickInto(el: HTMLElement, after?: () => void): void {\r\n const wrap = document.createElement('div');\r\n wrap.className = 'tplpick';\r\n TPL_LAYOUTS.forEach((layout) => {\r\n const tile = document.createElement('button');\r\n tile.type = 'button';\r\n tile.className = 'tpltile';\r\n tile.title = this.t(TPL_LABEL[layout]);\r\n tile.innerHTML = this.tplPreviewHTML(layout) + `<span class=\"tpllbl\">${this.t(TPL_LABEL[layout])}</span>`;\r\n tile.addEventListener('click', () => {\r\n this.closePop();\r\n this.insertTemplate(layout);\r\n after?.();\r\n });\r\n wrap.appendChild(tile);\r\n });\r\n el.appendChild(wrap);\r\n }\r\n\r\n private insertTemplate(layout: TplLayout): void {\r\n this.restoreSel();\r\n const media = `<div class=\"tpl-media\" contenteditable=\"false\">${this.imgPhHTML()}</div>`;\r\n const text = `<div class=\"tpl-text\"><h2>${this.t('heading')}</h2><p>${this.t('para')}</p></div>`;\r\n /* text-above-image layout keeps DOM order = visual order so the caret\r\n travels naturally; every other layout has the media slot first */\r\n const inner = layout === 'img-center' ? text + media : media + text;\r\n document.execCommand('insertHTML', false, `<div class=\"tpl tpl-${layout}\">${inner}</div><p><br></p>`);\r\n this.saveSel();\r\n this.onChange();\r\n }\r\n\r\n private clearTplSel(): void {\r\n this.tplCtx?.remove();\r\n this.tplCtx = null;\r\n this.tplActive?.classList.remove('tpl-selected');\r\n this.tplActive = null;\r\n }\r\n\r\n private selectTemplate(tpl: HTMLElement): void {\r\n if (this.tplActive === tpl) return;\r\n this.clearTplSel();\r\n this.tplActive = tpl;\r\n tpl.classList.add('tpl-selected');\r\n this.tplCtx = document.createElement('div');\r\n this.tplCtx.className = 'imgctx tplctx';\r\n this.tplCtx.dir = this.dir();\r\n document.body.appendChild(this.tplCtx);\r\n this.renderTplCtxButtons();\r\n }\r\n\r\n private renderTplCtxButtons(): void {\r\n const el = this.tplCtx;\r\n const tpl = this.tplActive;\r\n if (!el || !tpl) return;\r\n el.innerHTML = '';\r\n TPL_LAYOUTS.forEach((layout) => {\r\n const b = this.ctxBtn(TPL_ICON[layout], this.t(TPL_LABEL[layout]), () => this.setTplLayout(layout));\r\n b.classList.toggle('on', tpl.classList.contains('tpl-' + layout));\r\n el.appendChild(b);\r\n });\r\n el.append(this.ctxSep(), this.ctxBtn(IC.trash, this.t('deltemplate'), () => this.removeTemplate()));\r\n this.positionTplCtx();\r\n }\r\n\r\n private setTplLayout(layout: TplLayout): void {\r\n const tpl = this.tplActive;\r\n if (!tpl) return;\r\n TPL_LAYOUTS.forEach((l) => tpl.classList.remove('tpl-' + l));\r\n tpl.classList.add('tpl-' + layout);\r\n /* keep DOM order = visual order (see insertTemplate) */\r\n const media = tpl.querySelector(':scope > .tpl-media');\r\n const text = tpl.querySelector(':scope > .tpl-text');\r\n if (media && text) {\r\n if (layout === 'img-center') tpl.appendChild(media);\r\n else tpl.insertBefore(media, text);\r\n }\r\n this.renderTplCtxButtons();\r\n this.positionImgPhCtx();\r\n this.positionImageHandles();\r\n this.onChange();\r\n }\r\n\r\n private removeTemplate(): void {\r\n const tpl = this.tplActive;\r\n if (!tpl) return;\r\n this.clearTplSel();\r\n if (this.phActive && tpl.contains(this.phActive)) this.clearImgPlaceholderSel();\r\n if (this.imgActive && tpl.contains(this.imgActive)) this.clearImageHandles();\r\n tpl.remove();\r\n this.refreshState();\r\n this.onChange();\r\n }\r\n\r\n private positionTplCtx(): void {\r\n if (this.tplActive && !document.body.contains(this.tplActive)) {\r\n this.clearTplSel();\r\n return;\r\n }\r\n if (!this.tplActive || !this.tplCtx) return;\r\n const r = this.tplActive.getBoundingClientRect();\r\n const cw = this.tplCtx.offsetWidth;\r\n const ch = this.tplCtx.offsetHeight;\r\n let cx = r.left + scrollX + (r.width - cw) / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = r.top + scrollY - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = r.bottom + scrollY + 8;\r\n this.tplCtx.style.left = cx + 'px';\r\n this.tplCtx.style.top = cy + 'px';\r\n }\r\n\r\n private pickWordDoc(): void {\r\n this.docInput.value = '';\r\n this.docInput.click();\r\n }\r\n\r\n /* ---------------------------------------------------------- fullscreen */\r\n private toggleFullscreen(): void {\r\n this.shell.classList.toggle('fullscreen');\r\n const b = this.toolbar.querySelector('[data-id=fullscreen]') as HTMLElement | null;\r\n b?.classList.toggle('on', this.shell.classList.contains('fullscreen'));\r\n this.positionTableHandles();\r\n }\r\n\r\n /* ---------------------------------------------------------- table resize */\r\n private clearTableHandles(): void {\r\n this.tblCorner?.remove();\r\n this.tblCorner = null;\r\n this.tblColBars.forEach((b) => b.remove());\r\n this.tblColBars = [];\r\n this.tblCtx?.remove();\r\n this.tblCtx = null;\r\n this.tblCellMark?.remove();\r\n this.tblCellMark = null;\r\n this.tblOpMark?.remove();\r\n this.tblOpMark = null;\r\n this.tblOpMarkKind = null;\r\n this.tblActive?.classList.remove('tbl-selected');\r\n this.tblActive = null;\r\n }\r\n\r\n /** Blue outline around the cell that holds the caret, so it is clear\r\n which cell / row / column the table operations will target. */\r\n private positionCellMarker(): void {\r\n if (!this.tblCellMark) return;\r\n const cell = this.currentCell();\r\n if (!cell || !this.tblActive || cell.closest('table') !== this.tblActive) {\r\n this.tblCellMark.style.display = 'none';\r\n return;\r\n }\r\n const r = cell.getBoundingClientRect();\r\n this.tblCellMark.style.display = 'block';\r\n this.tblCellMark.style.left = r.left + scrollX + 'px';\r\n this.tblCellMark.style.top = r.top + scrollY + 'px';\r\n this.tblCellMark.style.width = r.width + 'px';\r\n this.tblCellMark.style.height = r.height + 'px';\r\n }\r\n\r\n /** Dashed highlight over the whole row / column an operation targets,\r\n shown while its button or menu item is hovered. */\r\n private setOpTarget(kind: 'row' | 'col' | null): void {\r\n this.tblOpMarkKind = kind;\r\n this.positionOpMark();\r\n }\r\n\r\n private positionOpMark(): void {\r\n const kind = this.tblOpMarkKind;\r\n const cell = kind ? this.currentCell() : null;\r\n if (!kind || !cell || !this.tblActive || cell.closest('table') !== this.tblActive) {\r\n this.tblOpMark?.remove();\r\n this.tblOpMark = null;\r\n return;\r\n }\r\n if (!this.tblOpMark) {\r\n this.tblOpMark = document.createElement('div');\r\n this.tblOpMark.className = 'tbl-opmark';\r\n document.body.appendChild(this.tblOpMark);\r\n }\r\n const tr = this.tblActive.getBoundingClientRect();\r\n const cr = cell.getBoundingClientRect();\r\n const rr = (cell.parentElement as HTMLElement).getBoundingClientRect();\r\n const left = kind === 'row' ? rr.left : cr.left;\r\n const top = kind === 'row' ? rr.top : tr.top;\r\n const width = kind === 'row' ? rr.width : cr.width;\r\n const height = kind === 'row' ? rr.height : tr.height;\r\n this.tblOpMark.style.left = left + scrollX + 'px';\r\n this.tblOpMark.style.top = top + scrollY + 'px';\r\n this.tblOpMark.style.width = width + 'px';\r\n this.tblOpMark.style.height = height + 'px';\r\n }\r\n\r\n /** Lowest allowed top for floating context toolbars — keeps them from\r\n covering the editor menubar/toolbar when the target sits on the first line. */\r\n private ctxMinTop(): number {\r\n return Math.max(scrollY + 4, this.ed.getBoundingClientRect().top + scrollY - 2);\r\n }\r\n\r\n private ctxBtn(icon: string, tip: string, fn: () => void, id?: string): HTMLButtonElement {\r\n const b = document.createElement('button');\r\n b.type = 'button';\r\n b.title = tip;\r\n b.innerHTML = icon;\r\n if (id) b.dataset.id = id;\r\n b.addEventListener('mousedown', (e) => e.preventDefault());\r\n b.addEventListener('click', fn);\r\n return b;\r\n }\r\n\r\n private ctxSep(): HTMLElement {\r\n const s = document.createElement('div');\r\n s.className = 'sep';\r\n return s;\r\n }\r\n\r\n private buildTableCtxToolbar(): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'tblctx';\r\n el.dir = this.dir();\r\n /* hovering a row/column button highlights the row/column it targets */\r\n const hl = (b: HTMLButtonElement, kind: 'row' | 'col'): HTMLButtonElement => {\r\n b.addEventListener('mouseenter', () => this.setOpTarget(kind));\r\n b.addEventListener('mouseleave', () => this.setOpTarget(null));\r\n return b;\r\n };\r\n const fillBtn = this.ctxBtn(IC.palette, this.t('cellbg'), () => this.cellFillMenu(fillBtn));\r\n el.append(\r\n hl(this.ctxBtn(IC.rowbefore, this.t('rowabove'), () => this.tableOp('rowabove')), 'row'),\r\n hl(this.ctxBtn(IC.rowafter, this.t('rowbelow'), () => this.tableOp('rowbelow')), 'row'),\r\n hl(this.ctxBtn(IC.moverowup, this.t('moverowup'), () => this.tableMove('rowup')), 'row'),\r\n hl(this.ctxBtn(IC.moverowdown, this.t('moverowdown'), () => this.tableMove('rowdown')), 'row'),\r\n hl(this.ctxBtn(IC.rowdelete, this.t('delrow'), () => this.tableOp('delrow')), 'row'),\r\n this.ctxSep(),\r\n hl(this.ctxBtn(IC.colbefore, this.t('colbefore'), () => this.tableOp('colbefore')), 'col'),\r\n hl(this.ctxBtn(IC.colafter, this.t('colafter'), () => this.tableOp('colafter')), 'col'),\r\n hl(this.ctxBtn(IC.movecolleft, this.t('movecolleft'), () => this.tableMove('colleft')), 'col'),\r\n hl(this.ctxBtn(IC.movecolright, this.t('movecolright'), () => this.tableMove('colright')), 'col'),\r\n hl(this.ctxBtn(IC.coldelete, this.t('delcol'), () => this.tableOp('delcol')), 'col'),\r\n this.ctxSep(),\r\n this.ctxBtn(IC.alignleft, this.t('tblalignleft'), () => this.alignTable('left')),\r\n this.ctxBtn(IC.aligncenter, this.t('tblaligncenter'), () => this.alignTable('center')),\r\n this.ctxBtn(IC.alignright, this.t('tblalignright'), () => this.alignTable('right')),\r\n this.ctxSep(),\r\n fillBtn,\r\n this.ctxBtn(IC.trash, this.t('deltable'), () => this.tableOp('deltable')),\r\n this.ctxBtn(IC.tableic, this.t('tablepropsttl'), () => this.tablePropsDlg())\r\n );\r\n document.body.appendChild(el);\r\n return el;\r\n }\r\n\r\n private positionTableHandles(): void {\r\n if (!this.tblActive || !document.body.contains(this.tblActive)) {\r\n this.clearTableHandles();\r\n return;\r\n }\r\n const rtl = this.ed.getAttribute('dir') === 'rtl';\r\n const r = this.tblActive.getBoundingClientRect();\r\n const top = r.top + scrollY;\r\n const left = r.left + scrollX;\r\n const right = r.right + scrollX;\r\n const bottom = r.bottom + scrollY;\r\n if (this.tblCorner) {\r\n this.tblCorner.style.top = bottom - 5 + 'px';\r\n this.tblCorner.style.left = (rtl ? left - 5 : right - 5) + 'px';\r\n this.tblCorner.style.cursor = rtl ? 'nesw-resize' : 'nwse-resize';\r\n }\r\n if (this.tblCtx) {\r\n const cw = this.tblCtx.offsetWidth;\r\n const ch = this.tblCtx.offsetHeight;\r\n let cx = left + (right - left) / 2 - cw / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = top - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = bottom + 8;\r\n this.tblCtx.style.left = cx + 'px';\r\n this.tblCtx.style.top = cy + 'px';\r\n }\r\n this.tblColBars.forEach((b) => b.remove());\r\n this.tblColBars = [];\r\n const row = this.tblActive.rows[0];\r\n if (row) {\r\n for (let i = 0; i < row.cells.length - 1; i++) {\r\n const rA = row.cells[i].getBoundingClientRect();\r\n const boundaryX = (rtl ? rA.left : rA.right) + scrollX;\r\n const bar = document.createElement('div');\r\n bar.className = 'tbl-colbar';\r\n bar.style.top = top + 'px';\r\n bar.style.left = boundaryX + 'px';\r\n bar.style.height = bottom - top + 'px';\r\n document.body.appendChild(bar);\r\n bar.addEventListener('mousedown', (e) => this.startColBarDrag(e, i));\r\n this.tblColBars.push(bar);\r\n }\r\n }\r\n this.positionCellMarker();\r\n this.positionOpMark();\r\n }\r\n\r\n private selectTableForResize(table: HTMLTableElement): void {\r\n if (this.tblActive === table) return;\r\n this.clearTableHandles();\r\n this.tblActive = table;\r\n table.classList.add('tbl-selected');\r\n this.tblCorner = document.createElement('div');\r\n this.tblCorner.className = 'tbl-handle';\r\n document.body.appendChild(this.tblCorner);\r\n this.tblCorner.addEventListener('mousedown', (e) => this.startTableCornerDrag(e));\r\n this.tblCellMark = document.createElement('div');\r\n this.tblCellMark.className = 'tbl-cellmark';\r\n this.tblCellMark.style.display = 'none';\r\n document.body.appendChild(this.tblCellMark);\r\n this.tblCtx = this.buildTableCtxToolbar();\r\n this.positionTableHandles();\r\n }\r\n\r\n private withNoTextSelect(fn: (restore: () => void) => void): void {\r\n const prev = document.body.style.userSelect;\r\n document.body.style.userSelect = 'none';\r\n fn(() => {\r\n document.body.style.userSelect = prev;\r\n });\r\n }\r\n\r\n private startTableCornerDrag(e: MouseEvent): void {\r\n e.preventDefault();\r\n const table = this.tblActive;\r\n if (!table) return;\r\n const rtl = this.ed.getAttribute('dir') === 'rtl';\r\n const startX = e.clientX;\r\n const startW = table.getBoundingClientRect().width;\r\n table.style.tableLayout = table.style.tableLayout || 'fixed';\r\n this.withNoTextSelect((restore) => {\r\n const mv = (ev: MouseEvent) => {\r\n const dx = rtl ? -(ev.clientX - startX) : ev.clientX - startX;\r\n table.style.width = Math.max(60, Math.round(startW + dx)) + 'px';\r\n this.positionTableHandles();\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n restore();\r\n this.onChange();\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n });\r\n }\r\n\r\n private startColBarDrag(e: MouseEvent, i: number): void {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const table = this.tblActive;\r\n if (!table) return;\r\n const rtl = this.ed.getAttribute('dir') === 'rtl';\r\n const rows = Array.from(table.rows);\r\n const colA = rows.map((r) => r.cells[i]).filter(Boolean) as HTMLTableCellElement[];\r\n const colB = rows.map((r) => r.cells[i + 1]).filter(Boolean) as HTMLTableCellElement[];\r\n if (!colA.length || !colB.length) return;\r\n const startX = e.clientX;\r\n const wA = colA[0].getBoundingClientRect().width;\r\n const wB = colB[0].getBoundingClientRect().width;\r\n table.style.tableLayout = 'fixed';\r\n this.withNoTextSelect((restore) => {\r\n const mv = (ev: MouseEvent) => {\r\n const dx = (rtl ? -1 : 1) * (ev.clientX - startX);\r\n colA.forEach((c) => (c.style.width = Math.max(24, Math.round(wA + dx)) + 'px'));\r\n colB.forEach((c) => (c.style.width = Math.max(24, Math.round(wB - dx)) + 'px'));\r\n this.positionTableHandles();\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n restore();\r\n this.onChange();\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- image toolbar / resize */\r\n private cancelImgHide(): void {\r\n if (this.imgHideTimer != null) {\r\n window.clearTimeout(this.imgHideTimer);\r\n this.imgHideTimer = null;\r\n }\r\n }\r\n\r\n private scheduleImgHide(): void {\r\n this.cancelImgHide();\r\n this.imgHideTimer = window.setTimeout(() => this.clearImageHandles(), 250);\r\n }\r\n\r\n private clearImageHandles(): void {\r\n this.cancelImgHide();\r\n this.imgHandles.forEach((h) => h.remove());\r\n this.imgHandles = [];\r\n this.imgCtx?.remove();\r\n this.imgCtx = null;\r\n this.imgActive?.classList.remove('img-selected');\r\n this.imgActive = null;\r\n }\r\n\r\n private selectImage(img: HTMLImageElement): void {\r\n if (this.imgActive === img) return;\r\n this.clearImageHandles();\r\n this.imgActive = img;\r\n img.classList.add('img-selected');\r\n this.imgHandles = IMG_CORNERS.map((corner) => {\r\n const h = document.createElement('div');\r\n h.className = 'img-handle img-handle-' + corner;\r\n h.dataset.corner = corner;\r\n h.addEventListener('mousedown', (e) => this.startImageResizeDrag(e, corner));\r\n h.addEventListener('mouseenter', () => this.cancelImgHide());\r\n h.addEventListener('mouseleave', () => this.scheduleImgHide());\r\n document.body.appendChild(h);\r\n return h;\r\n });\r\n this.imgCtx = this.buildImageCtxToolbar(img);\r\n this.positionImageHandles();\r\n }\r\n\r\n private buildImageCtxToolbar(img: HTMLImageElement): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'imgctx';\r\n el.dir = this.dir();\r\n const rebuild = () => {\r\n const rebuilt = this.buildImageCtxToolbar(img);\r\n this.imgCtx?.replaceWith(rebuilt);\r\n this.imgCtx = rebuilt;\r\n this.positionImageHandles();\r\n };\r\n const align = (a: 'left' | 'center' | 'right') => {\r\n this.setImageAlign(img, a);\r\n rebuild();\r\n };\r\n const isLeft = img.style.float === 'left';\r\n const isRight = img.style.float === 'right';\r\n const isCenter = !isLeft && !isRight && img.style.marginLeft === 'auto' && img.style.marginRight === 'auto';\r\n const mkBtn = (icon: string, tip: string, on: boolean, fn: () => void) => {\r\n const b = this.ctxBtn(icon, tip, fn);\r\n b.classList.toggle('on', on);\r\n return b;\r\n };\r\n el.append(\r\n mkBtn(IC.alignleft, this.t('alignleft'), isLeft, () => align('left')),\r\n mkBtn(IC.aligncenter, this.t('aligncenter'), isCenter, () => align('center')),\r\n mkBtn(IC.alignright, this.t('alignright'), isRight, () => align('right')),\r\n this.ctxSep(),\r\n mkBtn(IC.rotateleft, this.t('rotateleft'), false, () => {\r\n this.rotateImage(img, -90);\r\n rebuild();\r\n }),\r\n mkBtn(IC.rotateright, this.t('rotateright'), false, () => {\r\n this.rotateImage(img, 90);\r\n rebuild();\r\n }),\r\n this.ctxSep(),\r\n mkBtn(IC.fliphorizontal, this.t('fliphorizontal'), img.dataset.flipx === '1', () => {\r\n this.flipImage(img, 'x');\r\n rebuild();\r\n }),\r\n mkBtn(IC.flipvertical, this.t('flipvertical'), img.dataset.flipy === '1', () => {\r\n this.flipImage(img, 'y');\r\n rebuild();\r\n }),\r\n this.ctxSep(),\r\n mkBtn(IC.trash, this.t('deleteimg'), false, () => {\r\n /* inside a template media slot the image swaps back to an\r\n upload placeholder so the slot is not lost */\r\n const slot = img.closest('.tpl-media');\r\n if (slot && this.ed.contains(slot)) img.outerHTML = this.imgPhHTML();\r\n else img.remove();\r\n this.clearImageHandles();\r\n this.onChange();\r\n })\r\n );\r\n el.addEventListener('mousedown', (e) => e.preventDefault());\r\n el.addEventListener('mouseenter', () => this.cancelImgHide());\r\n el.addEventListener('mouseleave', () => this.scheduleImgHide());\r\n document.body.appendChild(el);\r\n return el;\r\n }\r\n\r\n private setImageAlign(img: HTMLImageElement, align: 'left' | 'center' | 'right'): void {\r\n img.style.float = '';\r\n img.style.display = '';\r\n img.style.marginLeft = '';\r\n img.style.marginRight = '';\r\n img.style.marginBottom = '';\r\n if (align === 'left') {\r\n img.style.float = 'left';\r\n img.style.marginInlineEnd = '1em';\r\n img.style.marginBottom = '0.5em';\r\n } else if (align === 'right') {\r\n img.style.float = 'right';\r\n img.style.marginInlineStart = '1em';\r\n img.style.marginBottom = '0.5em';\r\n } else {\r\n img.style.display = 'block';\r\n img.style.marginLeft = 'auto';\r\n img.style.marginRight = 'auto';\r\n }\r\n this.onChange();\r\n }\r\n\r\n private applyImgTransform(img: HTMLImageElement): void {\r\n const rot = parseInt(img.dataset.rotate || '0', 10);\r\n const fx = img.dataset.flipx === '1' ? -1 : 1;\r\n const fy = img.dataset.flipy === '1' ? -1 : 1;\r\n img.style.transform = rot || fx < 0 || fy < 0 ? `rotate(${rot}deg) scale(${fx}, ${fy})` : '';\r\n }\r\n\r\n private rotateImage(img: HTMLImageElement, delta: number): void {\r\n const rot = (((parseInt(img.dataset.rotate || '0', 10) + delta) % 360) + 360) % 360;\r\n img.dataset.rotate = String(rot);\r\n this.applyImgTransform(img);\r\n this.positionImageHandles();\r\n this.onChange();\r\n }\r\n\r\n private flipImage(img: HTMLImageElement, axis: 'x' | 'y'): void {\r\n const key = axis === 'x' ? 'flipx' : 'flipy';\r\n img.dataset[key] = img.dataset[key] === '1' ? '' : '1';\r\n this.applyImgTransform(img);\r\n this.positionImageHandles();\r\n this.onChange();\r\n }\r\n\r\n private positionImageHandles(): void {\r\n if (!this.imgActive || !document.body.contains(this.imgActive)) {\r\n this.clearImageHandles();\r\n return;\r\n }\r\n const r = this.imgActive.getBoundingClientRect();\r\n const top = r.top + scrollY;\r\n const left = r.left + scrollX;\r\n const right = r.right + scrollX;\r\n const bottom = r.bottom + scrollY;\r\n const cornerPos: Record<ImgCorner, [number, number]> = {\r\n nw: [left, top],\r\n ne: [right, top],\r\n sw: [left, bottom],\r\n se: [right, bottom]\r\n };\r\n this.imgHandles.forEach((h) => {\r\n const [x, y] = cornerPos[h.dataset.corner as ImgCorner];\r\n h.style.left = x - 5 + 'px';\r\n h.style.top = y - 5 + 'px';\r\n });\r\n if (this.imgCtx) {\r\n const cw = this.imgCtx.offsetWidth;\r\n const ch = this.imgCtx.offsetHeight;\r\n let cx = left + (right - left) / 2 - cw / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = top - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = bottom + 8;\r\n this.imgCtx.style.left = cx + 'px';\r\n this.imgCtx.style.top = cy + 'px';\r\n }\r\n }\r\n\r\n private startImageResizeDrag(e: MouseEvent, corner: ImgCorner): void {\r\n e.preventDefault();\r\n const img = this.imgActive;\r\n if (!img) return;\r\n this.cancelImgHide();\r\n const startX = e.clientX;\r\n const startW = img.getBoundingClientRect().width;\r\n const sign = corner === 'nw' || corner === 'sw' ? -1 : 1;\r\n this.withNoTextSelect((restore) => {\r\n const mv = (ev: MouseEvent) => {\r\n img.style.width = Math.max(24, Math.round(startW + sign * (ev.clientX - startX))) + 'px';\r\n img.style.height = 'auto';\r\n this.positionImageHandles();\r\n };\r\n const up = () => {\r\n window.removeEventListener('mousemove', mv);\r\n window.removeEventListener('mouseup', up);\r\n restore();\r\n this.onChange();\r\n };\r\n window.addEventListener('mousemove', mv);\r\n window.addEventListener('mouseup', up);\r\n });\r\n }\r\n\r\n /* ---------------------------------------------------------- selection bubble toolbar */\r\n private toggleBlock(tag: string): void {\r\n const active = this.currentBlock() === tag;\r\n this.exec('formatBlock', active ? '<p>' : '<' + tag + '>');\r\n if (tag === 'blockquote' && active) this.unwrapBlockquote();\r\n }\r\n\r\n /** Some browsers leave the <blockquote> wrapper in place after formatBlock('<p>'); strip it manually if so. */\r\n private unwrapBlockquote(): void {\r\n const s = window.getSelection();\r\n let node: Node | null = s && this.ed.contains(s.anchorNode) ? s.anchorNode : null;\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && (node as HTMLElement).tagName === 'BLOCKQUOTE') {\r\n const bq = node as HTMLElement;\r\n const parent = bq.parentNode!;\r\n while (bq.firstChild) parent.insertBefore(bq.firstChild, bq);\r\n parent.removeChild(bq);\r\n this.onChange();\r\n return;\r\n }\r\n node = node.parentNode;\r\n }\r\n }\r\n\r\n private clearSelToolbar(): void {\r\n this.selCtx?.remove();\r\n this.selCtx = null;\r\n }\r\n\r\n private updateSelToolbar(sel: Selection): void {\r\n if (this.options.readonly || sel.isCollapsed || !sel.rangeCount) {\r\n this.clearSelToolbar();\r\n return;\r\n }\r\n const range = sel.getRangeAt(0);\r\n const r = range.getBoundingClientRect();\r\n if (!r.width && !r.height) {\r\n this.clearSelToolbar();\r\n return;\r\n }\r\n if (!this.selCtx) this.selCtx = this.buildSelToolbar();\r\n this.positionSelToolbar(range);\r\n }\r\n\r\n private buildSelToolbar(): HTMLElement {\r\n const el = document.createElement('div');\r\n el.className = 'selctx';\r\n el.dir = this.dir();\r\n const foreBtn = this.ctxBtn(\r\n '<b style=\"font:600 15px/1 Georgia,serif\">A</b><span class=\"colorbar\" data-cb=\"fore\"></span>',\r\n this.t('forecolor'),\r\n () => this.colorMenu(foreBtn, 'fore')\r\n );\r\n const backBtn = this.ctxBtn(IC.backcolor, this.t('backcolor'), () => this.colorMenu(backBtn, 'back'));\r\n backBtn.querySelector('svg')?.insertAdjacentHTML('afterend', '<span class=\"colorbar\" data-cb=\"back\"></span>');\r\n const caseBtn = this.ctxBtn(IC.caseic, this.t('changecase'), () => this.caseMenu(caseBtn));\r\n const lhBtn = this.ctxBtn(IC.lineheight, this.t('lineheight'), () => this.lineHeightMenu(lhBtn));\r\n const wsBtn = this.ctxBtn(IC.wordspacing, this.t('wordspacing'), () => this.wordSpacingMenu(wsBtn));\r\n el.append(\r\n this.ctxBtn(IC.bold, this.t('bold'), () => this.exec('bold'), 'bold'),\r\n this.ctxBtn(IC.italic, this.t('italic'), () => this.exec('italic'), 'italic'),\r\n foreBtn,\r\n backBtn,\r\n this.ctxSep(),\r\n this.ctxBtn(IC.quote, this.t('quote'), () => this.toggleBlock('blockquote'), 'blockquote'),\r\n this.ctxBtn(IC.inlinecodeic, this.t('code'), () => this.toggleInlineCode(), 'code'),\r\n this.ctxBtn('<b style=\"font:700 12px/1 Arial,sans-serif\">H2</b>', this.blockLabel('h2'), () => this.toggleBlock('h2'), 'h2'),\r\n this.ctxBtn('<b style=\"font:700 12px/1 Arial,sans-serif\">H3</b>', this.blockLabel('h3'), () => this.toggleBlock('h3'), 'h3'),\r\n this.ctxSep(),\r\n this.ctxBtn(IC.link, this.t('linkttl'), () => this.linkDlg()),\r\n caseBtn,\r\n lhBtn,\r\n wsBtn\r\n );\r\n el.addEventListener('mousedown', (e) => e.preventDefault());\r\n document.body.appendChild(el);\r\n this.syncColorSwatches(el);\r\n return el;\r\n }\r\n\r\n private positionSelToolbar(range: Range): void {\r\n if (!this.selCtx) return;\r\n const r = range.getBoundingClientRect();\r\n const top = r.top + scrollY;\r\n const left = r.left + scrollX;\r\n const right = r.right + scrollX;\r\n const bottom = r.bottom + scrollY;\r\n const cw = this.selCtx.offsetWidth;\r\n const ch = this.selCtx.offsetHeight;\r\n let cx = left + (right - left) / 2 - cw / 2;\r\n cx = Math.max(8 + scrollX, Math.min(cx, scrollX + innerWidth - cw - 8));\r\n let cy = top - ch - 8;\r\n if (cy < this.ctxMinTop()) cy = bottom + 8;\r\n this.selCtx.style.left = cx + 'px';\r\n this.selCtx.style.top = cy + 'px';\r\n }\r\n\r\n private repositionSelToolbar(): void {\r\n if (!this.selCtx) return;\r\n const s = window.getSelection();\r\n if (s && s.rangeCount && !s.isCollapsed && this.ed.contains(s.anchorNode)) this.positionSelToolbar(s.getRangeAt(0));\r\n }\r\n\r\n /* ---------------------------------------------------------- state sync */\r\n private currentBlock(): string {\r\n const s = window.getSelection();\r\n if (!s || !s.anchorNode || !this.ed.contains(s.anchorNode)) return 'p';\r\n let node: Node | null = s.anchorNode;\r\n while (node && node !== this.ed) {\r\n if ((node as HTMLElement).nodeType === 1 && (node as HTMLElement).tagName === 'BLOCKQUOTE') return 'blockquote';\r\n node = node.parentNode;\r\n }\r\n const b = this.closestBlock(s.anchorNode);\r\n return b ? b.tagName.toLowerCase().replace('div', 'p') : 'p';\r\n }\r\n\r\n /** Element whose computed font reflects the current caret, falling back to the editor root before any selection lands inside it. */\r\n private fontRefEl(): Element {\r\n const s = window.getSelection();\r\n if (s && s.anchorNode && this.ed.contains(s.anchorNode)) {\r\n return s.anchorNode.nodeType === 1 ? (s.anchorNode as Element) : (s.anchorNode.parentElement as Element);\r\n }\r\n return this.ed;\r\n }\r\n\r\n private currentFont(): string {\r\n const fam = getComputedStyle(this.fontRefEl()).fontFamily.toLowerCase();\r\n const hit = this.options.fontFamilyFormats.find(([n, v]) => fam.includes(v.split(',')[0].toLowerCase()));\r\n return hit ? hit[0] : '';\r\n }\r\n\r\n private currentSize(): string {\r\n const px = Math.round(parseFloat(getComputedStyle(this.fontRefEl()).fontSize));\r\n return px > 0 ? px + 'px' : '';\r\n }\r\n\r\n private refreshState(): void {\r\n const s = window.getSelection();\r\n const inEd = s ? this.ed.contains(s.anchorNode) : false;\r\n const blkTag = this.currentBlock();\r\n const containers = [this.toolbar, this.selCtx].filter(Boolean) as HTMLElement[];\r\n containers.forEach((container) => {\r\n (\r\n [\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strikeThrough',\r\n 'justifyLeft',\r\n 'justifyCenter',\r\n 'justifyRight',\r\n 'justifyFull',\r\n 'insertOrderedList',\r\n 'insertUnorderedList'\r\n ] as const\r\n ).forEach((c) => {\r\n const b = container.querySelector(`[data-id=${c}]`) as HTMLElement | null;\r\n if (b) b.classList.toggle('on', inEd && document.queryCommandState(c));\r\n });\r\n (['h2', 'h3', 'blockquote'] as const).forEach((tag) => {\r\n const b = container.querySelector(`[data-id=${tag}]`) as HTMLElement | null;\r\n if (b) b.classList.toggle('on', inEd && blkTag === tag);\r\n });\r\n const codeB = container.querySelector('[data-id=code]') as HTMLElement | null;\r\n if (codeB) codeB.classList.toggle('on', inEd && !!this.closestInlineCode());\r\n });\r\n const blk = s ? this.closestBlock(s.anchorNode) : null;\r\n const dir = blk?.closest('[dir]')?.getAttribute('dir') || this.ed.getAttribute('dir') || this.dir();\r\n this.toolbar.querySelector('[data-id=ltr]')?.classList.toggle('on', inEd && dir === 'ltr');\r\n this.toolbar.querySelector('[data-id=rtl]')?.classList.toggle('on', inEd && dir === 'rtl');\r\n const setLbl = (id: string, val: string, def?: string) => {\r\n const l = this.toolbar.querySelector(`[data-id=${id}] .lbl`) as HTMLElement | null;\r\n if (!l) return;\r\n l.textContent = val || def || '';\r\n l.classList.toggle('empty', !val);\r\n };\r\n setLbl('fontsel', this.currentFont());\r\n setLbl('sizesel', this.currentSize().replace('px', ''));\r\n if (inEd) {\r\n setLbl('blocksel', BLOCKS.some((b) => b[0] === blkTag) ? this.blockLabel(blkTag) : this.t('para'));\r\n }\r\n this.sbWords.textContent = this.countWords() + ' ' + this.t('words');\r\n }\r\n\r\n private countWords(): number {\r\n const txt = (this.ed.textContent || '').trim();\r\n return txt ? txt.split(/\\s+/).length : 0;\r\n }\r\n\r\n /* ---------------------------------------------------------- paste */\r\n private handlePaste(e: ClipboardEvent): void {\r\n const cd = e.clipboardData;\r\n if (!cd) return;\r\n e.preventDefault();\r\n const html = cd.getData('text/html');\r\n const imgItem = Array.from(cd.items).find((i) => i.type.startsWith('image/'));\r\n if (imgItem && !html) {\r\n const fr = new FileReader();\r\n fr.onload = () => {\r\n document.execCommand('insertHTML', false, `<img src=\"${fr.result}\" alt=\"\">`);\r\n this.onChange();\r\n };\r\n fr.readAsDataURL(imgItem.getAsFile() as Blob);\r\n return;\r\n }\r\n if (!html) {\r\n /* additive pre-check before the normal text pipeline runs (the paste\r\n engine itself is untouched): a bare video page URL (YouTube & co.)\r\n becomes an embedded player. Anything else falls through unchanged. */\r\n const text = cd.getData('text/plain');\r\n const embed = /^\\S+$/.test(text.trim()) ? this.videoEmbedUrl(text.trim()) : null;\r\n if (embed) {\r\n document.execCommand('insertHTML', false, this.videoEmbedHTML(embed));\r\n this.onChange();\r\n return;\r\n }\r\n }\r\n if (html) {\r\n document.execCommand('insertHTML', false, cleanPastedHTML(html, this.dir()));\r\n } else {\r\n document.execCommand('insertHTML', false, normalizeTextPaste(cd.getData('text/plain')));\r\n }\r\n this.onChange();\r\n }\r\n\r\n /* ---------------------------------------------------------- init */\r\n private initUI(): void {\r\n this.closePop();\r\n this.closeDlg();\r\n this.clearTableHandles();\r\n this.clearImgPlaceholderSel();\r\n this.clearVphPlaceholderSel();\r\n this.clearVidHandles();\r\n this.clearCodeSel();\r\n this.shell.dir = this.dir();\r\n this.ed.dir = this.dir();\r\n if (this.options.menubar) this.buildMenubar();\r\n else this.menubar.style.display = 'none';\r\n if (this.options.toolbar) this.buildToolbar();\r\n else this.toolbar.style.display = 'none';\r\n this.sbHelp.textContent = this.t('statushelp');\r\n this.refreshState();\r\n }\r\n}\r\n\r\nexport default FableEditor;\r\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { FableEditor, EditorInitOptions, EditorLanguage, FableEditorApi } from '../core';\n\n@Component({\n selector: 'fable-editor',\n standalone: true,\n template: `<div #container></div>`,\n styles: [':host { display: block; }']\n})\nexport class FableEditorComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('container', { static: true }) container!: ElementRef<HTMLDivElement>;\n\n @Input() language: EditorLanguage = 'en';\n @Input() height = 302;\n @Input() menubar: boolean | string = true;\n @Input() toolbar: boolean | string = true;\n @Input() statusbar = true;\n @Input() readonly = false;\n @Input() primaryColor?: string;\n @Input() toolbarGroupBackground?: string;\n @Input() uiFontFamily?: string;\n @Input() init: Partial<Omit<EditorInitOptions, 'target'>> = {};\n @Input() value = '';\n\n @Output() editorChange = new EventEmitter<string>();\n @Output() editorReady = new EventEmitter<FableEditorApi>();\n\n private editor?: FableEditor;\n private lastContent = '';\n\n ngOnInit(): void {\n this.lastContent = this.value;\n this.editor = new FableEditor({\n target: this.container.nativeElement,\n language: this.language,\n height: this.height,\n menubar: this.menubar,\n toolbar: this.toolbar,\n statusbar: this.statusbar,\n readonly: this.readonly,\n primaryColor: this.primaryColor,\n toolbarGroupBackground: this.toolbarGroupBackground,\n uiFontFamily: this.uiFontFamily,\n initialContent: this.value,\n ...this.init,\n onChange: (content) => {\n this.lastContent = content;\n this.editorChange.emit(content);\n },\n onReady: (api) => this.editorReady.emit(api)\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.editor) return;\n if (changes['language'] && !changes['language'].firstChange) {\n this.editor.setLanguage(this.language);\n }\n if (changes['value'] && !changes['value'].firstChange && this.value !== this.lastContent) {\n this.lastContent = this.value;\n this.editor.setContent(this.value ?? '');\n }\n }\n\n ngOnDestroy(): void {\n this.editor?.destroy();\n this.editor = undefined;\n }\n\n getContent(): string {\n return this.editor?.getContent() ?? '';\n }\n\n setContent(html: string): void {\n this.lastContent = html;\n this.editor?.setContent(html ?? '');\n }\n\n insertContent(html: string): void {\n this.editor?.insertContent(html);\n }\n\n setLanguage(lang: EditorLanguage): void {\n this.editor?.setLanguage(lang);\n }\n\n focus(): void {\n this.editor?.focus();\n }\n\n writeValue(value: string): void {\n this.editor?.setContent(value ?? '');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FableEditorComponent } from './fable-editor.component';\n\n@NgModule({\n imports: [FableEditorComponent],\n exports: [FableEditorComponent]\n})\nexport class FableEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|